题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路
平衡二叉树成立的条件,左右子树的深度差不超过1。采用后序遍历可以避免访问重复的结点。这里的AVL不用判断BST成立的条件的,真是醉了。。
Code
class Solution {
public:
bool IsBalanced(TreeNode* pRoot, int *pDepth) {
if(!pRoot) {
*pDepth = 0;
return true;
}
int left, right;
if(IsBalanced(pRoot->left, &left) && IsBalanced(pRoot->right, &right)) {
int diff = left-right;
if(diff<=1 && diff>=-1) {
*pDepth = 1+(left > right ? left : right);
return true;
}
}
return false;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return IsBalanced(pRoot, &depth);
}
};
- java
public class Solution {
public int getH(TreeNode root) {
if(root == null) return 0;
int left = 1+getH(root.left);
int right = 1+getH(root.right);
return left > right ? left : right;
}
public int getBF(TreeNode root) {
return getH(root.left) - getH(root.right);
}
public int abs(int x) {
return x < 0 ? -x : x;
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
if(abs(getBF(root)) > 1) return false;
boolean result = true;
if(root.left != null) {
result = IsBalanced_Solution(root.left);
}
if(root.right != null) {
result = result && IsBalanced_Solution(root.right);
}
return result;
}
}