题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路
首先,要知道什么是平衡二叉树,总结一句话,左右子树深度之差不超过1.
所以,这个题目是利用了上一题的求深度,然后递归判别所有的子树是否是平衡二叉树。。。
AC代码
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot == nullptr) {
return true;
}
int l = TreeDepth(pRoot->left);
int r = TreeDepth(pRoot->right);
if(abs(r - l) > 1) {
return false;
}
// 向下递归地判断
return IsBalanced_Solution(pRoot->left) &&
IsBalanced_Solution(pRoot->right);
}
// 计算树的深度
int TreeDepth(TreeNode* pRoot) {
if(pRoot == nullptr) {
return 0;
}
int l = TreeDepth(pRoot->left);
int r = TreeDepth(pRoot->right);
return (l > r) ? (l + 1) : (r + 1);
}
};