给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
示例 1:
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree
1 public class LowestCommonAncestorofaBinarySearchTree { 2 static class TreeNode{ 3 int val; 4 TreeNode left; 5 TreeNode right; 6 TreeNode(int x) { 7 this.val = x; 8 } 9 } 10 11 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { 12 if(root == null) { 13 return null; 14 } 15 if((root.val >= p.val && root.val <= q.val) || (root.val <= p.val && root.val >= q.val)) { 16 return root; 17 } 18 if(p.val > root.val && q.val > root.val) { 19 return lowestCommonAncestor(root.right, p, q); 20 } 21 if(p.val < root.val && q.val < root.val) { 22 return lowestCommonAncestor(root.left, p, q); 23 } 24 return null; 25 } 26 }
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 11 class Solution { 12 private TreeNode result = null; 13 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { 14 if(root == null) { 15 return null; 16 } 17 if((root.val >= p.val && root.val <= q.val) || (root.val <= p.val && root.val >= q.val)) { 18 result = root; 19 } 20 if(p.val > root.val && q.val > root.val) { 21 lowestCommonAncestor(root.right, p, q); 22 } 23 if(p.val < root.val && q.val < root.val) { 24 lowestCommonAncestor(root.left, p, q); 25 } 26 return result; 27 } 28 }