LeetCode 235 二叉樹的最近公共祖先

2022-06-13 17:54:07 字數 2727 閱讀 3143

問題描述:

給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉搜尋樹:  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:

輸入: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:

1

class

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

改:

1

class

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:(官方)

1

class

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 的最近公共祖先是...