版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
又一个水题、、、、、
平衡二叉树就是,
一、根节点左右子树为空,或者左右子树高度差为1的树
二、同时根节点的左右子树也满足一
可以采取前一题中的层序遍历判断高度来判断,略微修改即可得
bool IsBalanced_Solution(TreeNode* pRoot)
{
bool avg = true;
TreeDepth(pRoot, avg);
return avg;
}
int TreeDepth(TreeNode* pRoot, bool & avg)
{
if (pRoot == nullptr)
{
return 0;
}
int l = TreeDepth(pRoot->left, avg);
int r = TreeDepth(pRoot->right, avg);
int max = l;
int min = r;
if (l < r)
{
max = r;
min = l;
}
int cha = max - min;
if (cha > 1)
{
avg = false;
}
return (l < r ? r : l) + 1;
}
二、优化
可采取从叶子节点遍历到根节点的方法,截支,避免重复计算