##题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 。
思路
这是leetcode上列为简单等级的DFS类型题目,但是需要对树的和深度优先搜索中递归搜索要掌握的比较好才能解决,首先需要明确什么是非平衡树,我的理解是叶子节点中有两个层数相差大于一,在对比返回错误的实例,我们可以看到比编号为4的叶子节点层级大于编号为2 的叶子节点并且层级相差大于1;
我们只要找出左右子树中的叶子节点,将他们的层数进行比较就可以较为轻松的A出这道题了。
下面给出代码C语言实现:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isBalanced(struct TreeNode* root) {
bool res = true;
helper(root, &res);
return ans;
}
int helper(struct TreeNode * root, bool *res) {
//递归终止条件,也是对left,right的初始化
if(!root) return 0;
int left = helper(root -> left, res);
int right = helper(root -> right, res);
if (left - right > 1 || right - left > 1) {
*res = false;
}
//在进行一次比较之后对左右子树的层级进行计数
return left > right ? left + 1 : right + 1;
}