Leetcode Note: Go - Balanced Binary Tree
Binary Tree Inorder Traversal - LeetCode
https://leetcode.com/problems/binary-tree-inorder-traversal/
- Go 言語で取り組んだメモ
所感
- aaa
実装準備
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
}
回答
32ms Golang solution with O(n) time and O(n) stack place - LeetCode Discuss
https://leetcode.com/problems/balanced-binary-tree/discuss/35843/32ms-Golang-solution-with-O(n)-time-and-O(n)-stack-place
func isBalanced(root *TreeNode) bool {
return getDepth(root) >= 0
}
func getDepth(n *TreeNode) int {
if n == nil {
return 0
}
leftDepth, rightDepth := getDepth(n.Left), getDepth(n.Right)
if leftDepth < 0 || rightDepth < 0 || leftDepth-rightDepth < -1 || leftDepth-rightDepth > 1 {
return -1
}
if leftDepth > rightDepth {
return leftDepth + 1
}
return rightDepth + 1
}
- getDepth を実装して return された数値が 0 以上なら true と判定
- getDepth では Left, Right を再帰的に調査
- 各 Depth が 0 未満、 leftDepth - rightDepth が -1 未満、 leftDepth - rightDepth が 1 以上といった条件に合致したら -1 を return
- leftDepth が rightDepth より大きければ leftDepth + 1 を return
- それ以外なら rightDepth + 1 を return