题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
本题知识点:
树
解题思路:
- 先判断根结点的左右子树深度差是否大于1,如果不大于1,则将根结点的左右结点作为两个根结点,继续判断。
- 方法1在判断上层结点时会重复多次遍历下层结点,可以改为从下到上遍历,如果子树为平衡二叉树,则返回树的深度,反之则直接跳出循环。
代码:
1.
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(!pRoot)
return 0;
int depth = 1;
depth += max(TreeDepth(pRoot->left), TreeDepth(pRoot->right));
return depth;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if(!pRoot)
return true;
if(abs(TreeDepth(pRoot->left) - TreeDepth(pRoot->right)) > 1)
return false;
return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
}
};
2.
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(!pRoot)
return 0;
int left = TreeDepth(pRoot->left);
if(left == -1)
return -1;
int right = TreeDepth(pRoot->right);
if(right == -1)
return -1;
return abs(left - right) > 1 ? -1 : 1 + max(left, right);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
return TreeDepth(pRoot) != -1;
}
};