题目链接
剑指 Offer 55 - II. 平衡二叉树
思路分析
在判断平衡二叉树之前,要首先搞清楚什么是平衡二叉树
AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。 平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
在搞明白定义之后,我们就知道如何判断是否是平衡二叉树,只要能满足左右子树高度之差不超过1就可以。 可以看出, 我们需要计算高度,那么又出现了两种思路
- 1我们自上而下,计算每一个节点左右子树高度,从而判断是否为平衡二叉树,这种方法我们从上到下会重复计算很多次
- 2 采用自下而上来进行计算,先从最底部开始算起 层层向上,这样计算能够提高效率
代码实现
class Solution {
public:
int getDepth(TreeNode* root)
{
if(root == NULL)
return 0;
int left = getDepth(root->left);
if(left == -1)
return -1;
int right = getDepth(root->right);
if(right == -1)
return -1;
return abs(left - right) <= 1 ? (1 + max(left, right)) : -1;
}
bool isBalanced(TreeNode* root) {
if(root == NULL)
return true;
return getDepth(root) != -1;
}
};
|