题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
第一种:
从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return getDepth(pRoot) != -1;
}
int getDepth(TreeNode* pRoot){
if(pRoot == NULL)
return 0;
int left = getDepth(pRoot->left);
if(left ==-1)
return -1;
int right = getDepth(pRoot->right);
if(right==-1)
return -1;
return abs(left-right) > 1 ? -1: max(left,right)+1;
}
};
第二种:
class Solution {
public:
bool isBalanced=true;
bool IsBalanced_Solution(TreeNode* pRoot) {
getDepth(pRoot);
return isBalanced;
}
int getDepth(TreeNode* pRoot){
if(pRoot==NULL)
return 0;
int left = getDepth(pRoot->left);
int right = getDepth(pRoot->right);
if(abs(left-right) > 1 )
isBalanced = false;
return right>left ?right+1:left+1;
}
};