题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路如下:
平衡二叉树是 左右子树的高度差不大于1的, 并且左右子树都是平衡二叉树
因此可以递归求解, 获取左右子树的高度,如果差大于1,则不是平衡二叉树
代码如下:
class Solution {
public:
// 平衡二叉树特点:左右子树高度差不大于1,且左右子树都是平衡二叉树
// 获取树深度的同时 判断左右子树的高度差是否大于1,
int get_tree_depth(TreeNode* root){
if(NULL == root){
return 0;
}
int leftdepth = get_tree_depth(root->left);
if(-1 == leftdepth){
return -1;
}
int rightdepth = get_tree_depth(root->right);
if(-1 == rightdepth){
return -1;
}
int diff = rightdepth > leftdepth ? rightdepth - leftdepth : leftdepth - rightdepth;
if(diff > 1){
return -1;
}
return 1 + (rightdepth > leftdepth ? rightdepth : leftdepth);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
return get_tree_depth(pRoot) != -1;
}
};