1、题目
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
2、解题1
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot == NULL)return true;
bool leftFlag = IsBalanced_Solution(pRoot->left);
bool rightFlag = IsBalanced_Solution(pRoot->right);
bool flag = true;
int left = depthNumber(pRoot->left);
int right = depthNumber(pRoot->right);
if(left>right+1 || right > left+1){
flag = false;
}
return flag&&leftFlag&&rightFlag;
}
int depthNumber(TreeNode* pRoot){
if(pRoot == NULL)return 0;
int left = depthNumber(pRoot->left);
int right = depthNumber(pRoot->right);
return left>right?(left+1):(right+1);
}
};
3、解题2
解题1每次递归都必须遍历叶子节点,改进
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot == NULL)return true;
int depth;
return IsBalance(pRoot,&depth);
}
bool IsBalance(TreeNode* pRoot,int* depth){
if(pRoot == NULL){
*depth = 0;
return true;
}
int left,right;
bool leftFlag = IsBalance(pRoot->left,&left);
bool rightFlag = IsBalance(pRoot->right,&right);
if(leftFlag && rightFlag){
if(left>right+1 || right>left+1){
return false;
}
*depth = left>right?left+1:right+1;
return true;
}
return false;
}
};