题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 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
思路
遍历二叉树,根据平衡二叉树的定义,计算每个节点的左右子树的高度,进行相减,差值大于1,则返回false,否则继续遍历,直到遍历结束。左子树和右子树必须都是平衡的,才能说明整个二叉树是平衡的。
代码
\public class Solution {
public boolean isBalanced(TreeNode root) {
//先进行遍历
if(root == null){
return true;
}
if(root.left == null && root.right == null){
return true;
}
//访问当前节点,计算左右子树的高度,并求差值
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
if(leftHeight - rightHeight > 1 || leftHeight - rightHeight < -1){
return false;
}
//左子树和右子树必须都是平衡的才能说明整个树是平衡的
return isBalanced(root.left) && isBalanced(root.right);
}
public int getHeight(TreeNode root) {
if(root == null){
return 0;
}
int left = getHeight(root.left);
int right = getHeight(root.right);
return 1 +( left > right ? left : right);
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/balanced-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。