题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
类似上一题求树的深度,但是如果每次都要求树的深度,则会反复计算相同的节点。如果子树不平衡,直接返回否。
注意:子树深度的返回值可以用特定值-1来表示不平衡,而正数表示子树深度
代码
class Solution {
public:
// 返回值:树的深度
bool IsBalanced_Solution(TreeNode* pRoot){
if (pRoot == nullptr)
return true; // ko
return TreeDepth(pRoot)!=-1;
}
// 返回值:
// -1:子树不平衡
// >0:子树深度
int TreeDepth(TreeNode* pRoot){
if (pRoot == nullptr)
return 0;
int left = TreeDepth(pRoot->left);
if(left==-1)
return -1;
int right = TreeDepth(pRoot->right);
if(right ==-1)
return -1;
if(left-right > 1 || left - right <-1)
return -1;
return left>right ? left+1:right+1;
}
};