問題描述:
給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。
例如,給定如下二叉搜尋樹: root = [6,2,8,0,4,7,9,null,null,3,5]
_______6______示例 1:/ \
___2__ ___8__
/ \ / \
0 _4 7 9
/ \
3 5
輸入:root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8輸出:6解釋:節點示例 2:2
和節點8
的最近公共祖先是6。
輸入:root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4輸出:2解釋:節點說明:2
和節點4
的最近公共祖先是2
, 因為根據定義最近公共祖先節點可以為節點本身。
由於是二叉搜尋樹,找到 p.val <= root.val <= q.val return root
方法1:
1class
solution(object):
2def
lowestcommonancestor(self, root, p, q):
3"""
4:type root: treenode
5:type p: treenode
6:type q: treenode
7:rtype: treenode
8"""
9if root ==none:
10return
none
11 min_ =min(p.val,q.val)
12 max_ =max(p.val,q.val)
13if min_<= root.val <=max_:
14return
root
15else
:16 l =self.lowestcommonancestor(root.left,p,q)
17 r =self.lowestcommonancestor(root.right,p,q)
18if
notl :
19returnr20
ifnot
r :
21return l
改:
1class
solution(object):
2def
lowestcommonancestor(self, root, p, q):
3"""
4:type root: treenode
5:type p: treenode
6:type q: treenode
7:rtype: treenode
8"""
9while
root:
10if p.val < root.val >q.val:
11 root =root.left
12elif p.val > root.val 13 root =root.right
14else:15
return root
方法2:(官方)
1class
solution(object):
2def
search(self, root, x, stack):34
if x.val 5 self.search(root.left, x, stack) #
一定存在
6elif root.val 7self.search(root.right, x, stack)
8else:9
return
10def
lowestcommonancestor(self, root, p, q):
11"""
12:type root: treenode
13:type p: treenode
14:type q: treenode
15:rtype: treenode
16"""
17 s_p, s_q =,
18self.search(root, p, s_p)
19self.search(root, q, s_q)
20 n =min(len(s_q), len(s_p))
21for i in
range(n):
22if s_p[i] !=s_q[i]:
23return s_q[i - 1]
24return s_q[n-1]
2018-09-21 06:56:21
LeetCode 235 二叉樹的最近公共祖先
例如,給定如下二叉搜尋樹 root 6,2,8,0,4,7,9,null,null,3,5 6 2 8 0 4 7 9 3 5 示例 1 輸入 root 6,2,8,0,4,7,9,null,null,3,5 p 2,q 8 輸出 6 解釋 節點 2 和節點 8 的最近公共祖先是 6。示例 2 輸入...
Leetcode 235 二叉樹的最近公共祖先
給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。示例 1 輸入 root 6,2,8,0,4,7,9,null,null,3,5 p 2,q 8 輸出 6 解釋 節點 2 和節點 8 的最近公共祖先是 6。示例 2 輸入 root 6,2,8,0,4,7,9,null,null,3,5 p...
leetcode 235 二叉搜尋樹的最近公共祖先
給定乙個二叉搜尋樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉搜尋樹 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 的最近公共祖先是...