平衡二叉树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
想法
平衡二叉树定义如下:
平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
满足平衡二叉树有两个条件:
- 左右子树高度差不超过1
- 左右子树都是平衡二叉树
所以再写一个求树高的函数即可。
代码
class Solution {
public:
int TreeHeight(TreeNode* root) {
if (root == NULL) return 0;
return (max(TreeHeight(root->left), TreeHeight(root->right)) + 1);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if (pRoot == NULL) return true;
if (abs(TreeHeight(pRoot->left) - TreeHeight(pRoot->right)) <= 1 &&
IsBalanced_Solution(pRoot->left) &&
IsBalanced_Solution(pRoot->right)) {
return true;
}
return false;
}
};