Description
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
Given the following tree [3,9,20,null,null,15,7]:
Return true.
Given the following tree [1,2,2,3,3,null,null,4,4]:
1 2 3 4 5 6 7
| 1 / \ 2 2 / \ 3 3 / \ 4 4
|
Return false.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| func isBalanced(root *TreeNode) bool { return maxDepth(root) != -1 }
func maxDepth(root *TreeNode) int { if root == nil { return 0 }
left := maxDepth(root.Left) right := maxDepth(root.Right)
if left == -1 || right == -1 || left-right > 1 || right-left > 1 { return -1 }
return max(left, right) + 1 }
func max(a, b int) int { if a > b { return a }
return b }
|
Note
假設有以下參數:
1
| root: [2, 1, 5, 4, 3, 6, 7]
|
說明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 樹的形狀如下:
-------------------- 2 / \ 1 5 / \ 4 6 / \ 3 7 --------------------
先執行左節點的遞迴,再執行右節點的遞迴。
節點 1 返回階層 1。
節點 3 返回階層 1。
節點 4 比較子節點 3 和 nil,返回階層 2。
節點 7 返回階層 1。
節點 6 比較子節點 nil 和 7,返回階層 2。
節點 5 比較子節點 4 和 6,返回階層 3。
節點 2 比較子節點 1 和 5,由於階層相差大於 1,因此返回標記 -1。
最終返回:false
|
Code