【剑指offer】面试题68 - I:二叉树的最近公共祖先(Java)
給定一個二叉搜索樹, 找到該樹中兩個指定節(jié)點的最近公共祖先。
百度百科中最近公共祖先的定義為:“對于有根樹 T 的兩個結點 p、q,最近公共祖先表示為一個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節(jié)點也可以是它自己的祖先)。”
例如,給定如下二叉搜索樹:??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?
解釋: 節(jié)點 2 和節(jié)點 8 的最近公共祖先是 6。
示例 2:
輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
輸出: 2
解釋: 節(jié)點 2 和節(jié)點 4 的最近公共祖先是 2, 因為根據定義最近公共祖先節(jié)點可以為節(jié)點本身。
?
說明:
所有節(jié)點的值都是唯一的。
p、q 為不同節(jié)點且均存在于給定的二叉搜索樹中。
代碼:
/**
?*?Definition?for?a?binary?tree?node.
?*?public?class?TreeNode?{
?*?????int?val;
?*?????TreeNode?left;
?*?????TreeNode?right;
?*?????TreeNode(int?x)?{?val?=?x;?}
?*?}
?*/
class?Solution?{
????public?TreeNode?lowestCommonAncestor(TreeNode?root,?TreeNode?p,?TreeNode?q)?{
?????????if?(root?==?null)
????????????return?null;
????????
????????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;
????}
}
總結
以上是生活随笔為你收集整理的【剑指offer】面试题68 - I:二叉树的最近公共祖先(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode--461. 汉明距离
- 下一篇: 【剑指offer】面试题34:二叉树中和