题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路
首先我们应该知道,平衡二叉树就是每一个根的左右子树的高度差都不大于1,接下来看我的解体思路:
- 实现一个求二叉树高度的函数;
- 利用这个函数求出这个二叉树左右子树的高度及高度差diffdepth;
- 判断这个高度差绝对值是否小于1;
- 然后递归地判断子树是否为平衡二叉树。
不足之处:多次对左右字数求高度,时间复杂度可能会比较高。
实现代码
class Solution {
public:
//定义一个函数求二叉树的高度
int depth(TreeNode* Root)
{
if(Root==NULL)
return 0;
int leftdepth=depth(Root->left);
int rightdepth=depth(Root->right);
return leftdepth>rightdepth?leftdepth+1:rightdepth+1;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL)
return true;
int leftdepth=depth(pRoot->left);
int rightdepth=depth(pRoot->right);
int diffdepth=leftdepth-rightdepth;
if(diffdepth<-1 || diffdepth>1)
return false;
else
return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
}
};