#题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
#题解
思路:
- 总体思路: 一棵树是否平衡,要满足三个条件:左子树平衡,右子树平衡,左右子树高度差不大于1,因为题目给出的函数框架中返回值是
bool
类型,而我们要获得子树的高度,所以我们写一个gethigh
函数去获得子树高度同时判断树是否平衡。 - 先赋予
gethigh
函数语义:如果树不平衡返回-1,否则返回树高
- 设计函数: 如果根节点为空则树平衡,返回高度为 0 ,否则调用
gethigh
函数获得左右子树的高度。判断如果左右子树不平衡或者左右子树高度差大于 1, 则此树不平衡,返回 -1,否则返回左右子树中较大的高度加一。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int gethigh(struct TreeNode *root) {
if (root == NULL) return 0;
int r = gethigh(root->right);
int l = gethigh(root->left);
if (r == -1 || l == -1 || abs(r - l) > 1) return -1;
return r > l ? r + 1 : l + 1;
}
bool isBalanced(struct TreeNode *root) {
return gethigh(root) != -1;
}
[LeetCode练习汇总](https://blog.csdn.net/skange/article/details/80607046)