Java LeetCode篇-二叉树经典解法(实现:判断平衡二叉树、找两个节点最近的祖先等)
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
// 判断一棵树是否为平衡二叉树
public boolean isBalanced(TreeNode root) {
return getHeight(root) != -1;
}
private int getHeight(TreeNode root) {
if (root == null) {
return 0;
}
int leftHeight = getHeight(root.left);
if (leftHeight == -1) {
return -1;
}
int rightHeight = getHeight(root.right);
if (rightHeight == -1) {
return -1;
}
return Math.abs(leftHeight - rightHeight) > 1 ? -1 : 1 + Math.max(leftHeight, rightHeight);
}
// 寻找两个节点的最近公共祖先
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
return root;
}
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left != null && right != null) {
return root;
}
return left != null ? left : right;
}
}
这段代码首先定义了一个TreeNode
类来表示二叉树节点,然后在Solution
类中实现了判断平衡二叉树和查找最近公共祖先的方法。isBalanced
方法通过计算树的高度来判断是否平衡,如果计算出的高度为-1,则表示不是平衡的。lowestCommonAncestor
方法递归地查找两个节点p
和q
的最近公共祖先。如果当前节点是null
,或者当前节点是p
或q
之一,则直接返回当前节点。否则,递归查找左右子树,如果左右子树均不为null
,则当前节点为最近公共祖先。如果左子树不为null
,则返回左子树的结果,否则返回右子树的结果。
评论已关闭