输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树为:每一个节点的左右子树高度差都小于等于1.空树为平衡树
先序遍历每一个节点,并计算其左右子树的高度差
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
//平衡二叉树的左右子树高度差小于1,所以首先求二叉树的高度
if(pRoot==NULL)
return true;
//根节点
int leftheight=height(pRoot->left);
int rightheight=height(pRoot->right);
if(abs(leftheight-rightheight)>1)
return false;
else
return true;
//递归访问左右子树节点
return IsBalanced_Solution(pRoot->left)&&IsBalanced_Solution(pRoot->right);
}
int height(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
int leftheight=height(pRoot->left);
int rightheight=height(pRoot->right);
return 1+(leftheight>rightheight?leftheight:rightheight);
}
};