输入一棵二叉树,判断该二叉树是否是平衡二叉树。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
class
Solution { //后续遍历时,遍历到一个节点,其左右子树已经遍历
依次自底向上判断,每个节点只需要遍历一次 private
boolean
isBalanced= true ; public
boolean
IsBalanced_Solution(TreeNode root) { getDepth(root); return
isBalanced; } public
int
getDepth(TreeNode root){ if (root== null ) return
0 ; int
left=getDepth(root.left); int
right=getDepth(root.right); if (Math.abs(left-right)> 1 ){ isBalanced= false ; } return
right>left ?right+ 1 :left+ 1 ; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class
Solution { public : bool
IsBalanced(TreeNode *root, int
& dep){ if (root
== NULL){ return
true ; } int
left = 0; int
right = 0; if (IsBalanced(root->left,left)
&& IsBalanced(root->right, right)){ int
dif = left - right; if (dif<-1
|| dif >1) return
false ; dep
= (left > right ? left : right) + 1; return
true ; } return
false ; } bool
IsBalanced_Solution(TreeNode* pRoot) { int
dep = 0; return
IsBalanced(pRoot, dep); } }; |