leetcode 236 二叉樹的最近公共祖先

2021-10-12 07:04:14 字數 977 閱讀 8978

因為樹中的節點值都是唯一的,所以判斷乙個點是否是公共祖先有兩種方法:

1,左右子樹都包含乙個數,那麼這個節點是公共祖先。

2,左右子樹只有乙個包含目標值,當前節點等於另乙個目標值。

根據這個條件可以篩選出最近的公共祖先。

假設這個點不是最近的,那麼該節點的父節點也滿足這兩個條件,則值就不是唯一的,所以這個點就是最近祖先。

lass solution(

object):

def__init__

(self)

: self.res =

none

deflowestcommonancestor

(self, root, p, q)

:"""

:type root: treenode

:type p: treenode

:type q: treenode

:rtype: treenode

"""self.dfs(root,p,q)

return self.res

defdfs(self,root,p,q):if

not root:

return

false

left = self.dfs(root.left,p,q)

right = self.dfs(root.right,p,q)

if(left and right)or(

(root.val==p.val or root.val==q.val)

and(left or right)):

self.res = root

return left or right or root.val==p.val or root.val==q.val

LeetCode236 二叉樹最近祖先

思考 這個函式就是查詢p,q兩個節點的祖先,然後給了這棵樹的root,1 它先進行判斷,根節點是不是null 或者根節點是否是p q,要是有乙個是,那祖先就肯定是root 2 它用了遞迴的思想去查詢左右兩個子樹,因為pq的祖先要麼在左邊,要麼就在右邊,所以肯定能找到乙個祖先。3 若找到的left 子...

LeetCode 236 二叉樹最近公共祖先

leetcode 236 二叉樹最近公共祖先 236.二叉樹的最近公共祖先 題目描述 給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。解體思路 分兩部分解決 第一部分 實現判斷兩個結點包含於某根節點的子樹內 第二部分 先序遍歷二叉樹,如果根節點的子樹包含qp目標結點 傳入左孩子,進行遞迴。傳入...

leetcode 236 二叉樹最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...