110. 平衡二叉树
难度:简单
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
思路
本例使用的是从下而上递归法,是通过求树的每个节点的高度来判断在该节点是否满足平衡二叉树的定义
如果使用从上而下递归法,即求每个节点的深度(注意深度和高度的区别),这样会将底层的节点遍历多遍,浪费时间
package cn.edu.xjtu.carlWay.tree.balancedBinaryTree;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
/**
* 110. 平衡二叉树
* 给定一个二叉树,判断它是否是高度平衡的二叉树。
* <p>
* 本题中,一棵高度平衡二叉树定义为:
* 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
* <p>
* https://leetcode-cn.com/problems/balanced-binary-tree/
*/
public class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
return height(root) >= 0;
}
public int height(TreeNode node) {
if (node == null) {
return 0;
}
int leftHeight = height(node.left);
int rightHeight = height(node.right);
if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) {
return -1;
}
return Math.max(leftHeight, rightHeight) + 1;
}
}