LC-平衡二叉树
链接:https://leetcode.cn/problems/balanced-binary-tree/description/
描述:给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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
思路:根据平衡二叉树定义,我们只需要遍历树的每个节点,获取他的左右子树的高度差,然后判断是不是平衡二叉树。
那怎么获取他左右子树高度呢,代码如下:
public int depth(TreeNode root) {
//空节点就是0,不为空的就是它左右子树高度较大的再加一就是它自身的高度
if (root == null) {
return 0;
}
return Math.max(depth(root.left), depth(root.right)) + 1;
}
下面是判断是不是平衡二叉树的代码:
public boolean isBalanced(TreeNode root) {
//节点为空时认为是平衡的
if (root == null) {
return true;
}
//获取左右子树的高度差,如果大于1或者小于-1,则都是不平衡的
int depth = depth(root.left) - depth(root.right);
if (depth > 1 || depth < -1) {
return false;
}
//当前节点是平衡的,递归继续判断他的左右子树是不是都是平衡的
return isBalanced(root.left) && isBalanced(root.right);
}