难度:简单
题目:
给定一个二叉树,判断它是否是高度平衡的二叉树。
描述:
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:true
示例 2:
输入:root = [1,2,2,3,3,null,null,4,4] 输出:false
示例 3:
输入:root = [] 输出:true
提示:
- 树中的节点数在范围
[0, 5000]
内 -104 <= Node.val <= 104
Related Topics
- 树
- 深度优先搜索
- 二叉树
重点!!!解题思路
第一步:
这道题我们首先采用递归和栈的思想来解决
已知是高度差>1即不是平衡二叉树
我们可以求出左子树和右子树的树高
在此过程中,如果出现左子树和右子树的差的绝对值>1那么就返回一个负数
如果左子树或右子树返回的值有任何一个是负数,那么也需要返回负数
第二步:
程序最终判断条件为,如果返回的值没用负数,那么它肯定是平衡二叉树
源码+讲解:
class Solution {
public boolean isBalanced(TreeNode root) {
return dfs(root)>=0; //如果返回的值>=0,那么肯定是一个平衡二叉树
}
public int dfs(TreeNode root){
if (root==null) return 0;
int left=dfs(root.left);
int right=dfs(root.right);
if (Math.abs(left-right)>1) return -2; //这里为什么返回-2,因为最后都做了+1处理,如果+1后为0,那根本不知道是由于节点空返回的0,还是左子树或右子树差值>1返回的
if (left<0 || right<0) return -2; //如果左右子树高度都是负数,那么肯定就不是平衡二叉树了
return Math.max(left,right)+1; //每次让树高+1
}
}
运行结果:
如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。
系列持续更新中,点个订阅吧