一、题目概述
二、思路方向
在Java中,判断一个二叉树是否是平衡二叉树,可以通过递归的方式来实现。平衡二叉树的定义是:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都必须是平衡二叉树。
我们可以通过编写一个辅助函数来计算二叉树的高度,并在计算高度的同时检查是否满足平衡二叉树的条件。
三、代码实现
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) != -1;
}
// 计算树的高度,并检查是否为平衡二叉树
// 如果不是平衡二叉树,则返回-1;否则返回树的高度
private int height(TreeNode node) {
if (node == null) {
return 0;
}
int leftHeight = height(node.left);
if (leftHeight == -1) {
// 左子树不是平衡二叉树
return -1;
}
int rightHeight = height(node.right);
if (rightHeight == -1) {
// 右子树不是平衡二叉树
return -1;
}
// 检查当前节点是否满足平衡二叉树的条件
if (Math.abs(leftHeight - rightHeight) > 1) {
return -1;
}
// 返回当前树的高度
return Math.max(leftHeight, rightHeight) + 1;
}
public static void main(String[] args) {
// 示例用法
// 你可以根据需要构建自己的二叉树进行测试
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.right = new TreeNode(6);
Solution solution = new Solution();
boolean isBalanced = solution.isBalanced(root);
System.out.println("Is Balanced? " + isBalanced);
}
}
执行结果:
四、小结
在这个示例中,
isBalanced
方法是主要的公共接口,它调用height
方法来判断二叉树是否平衡。height
方法是一个递归函数,它计算并返回给定节点为根的子树的高度。如果在计算过程中发现任何子树不平衡(即左右子树高度差大于1),则height
方法会返回-1
,表示整个树不平衡。如果所有子树都平衡,则返回树的高度。最后,isBalanced
方法通过检查height(root)
是否返回-1
来判断整棵树是否平衡。
结语
一叶浮萍归大海
为人何处不相逢
!!!