树中两个节点的最低公共先人
题目形容
二叉查找树
* 二叉查找树中,两个节点 p, q 的公共先人 root 满足 root.val >= p.val && root.val <= q.val。
题目链接: [树中两个节点的最低公共先人]()
代码
/** * 题目:树中两个节点的最低公共先人 */public class Jz76 { /** * 二叉查找树 * 二叉查找树中,两个节点 p, q 的公共先人 root 满足 root.val >= p.val && root.val <= q.val。 * * @param root * @param p * @param q * @return */ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return root; } if (root.val > p.val && root.val > q.val) { return lowestCommonAncestor(root.left, p, q); } if (root.val < p.val && root.val < q.val) { return lowestCommonAncestor(root.right, p, q); } return root; } /** * 一般二叉树 * 在左右子树中查找是否存在 p 或者 q,如果 p 和 q 别离在两个子树中,那么就阐明根节点就是最低公共先人。 * * @param root * @param p * @param q * @return */ public TreeNode lowestCommonAncestor2(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); return left == null ? right : right == null ? left : root; } public static void main(String[] args) { }}
【每日寄语】 首孝悌,次见闻;知某数,识某文。