力扣 236二叉樹的最近公共祖先

2021-10-23 15:10:22 字數 1194 閱讀 7293

自底向上,有點後序遍歷的意思。(其實在自上而下遞迴之前,先篩選當前節點也能ac)

1、後序遍歷,左右根的遍歷。

2、首先確保本節點非null,或者與目標節點相同直接返回本節點。

3、本節點非空,則判斷左右子節點是否為null。這裡分為4種情況:(1)左右子節點都為null,那就不為所求了,直接返回null;(2)僅左子節點為null,則返回右子節點(自下而上的,說明不為null的節點要麼是target node,要麼是ancestor node);(3)僅有右子節點為null,則返回左子節點。(4)左右都不為null,好了就是你了,直接返回本節點root。

(1)藍色是公共祖先,綠色是兩個節點。從左邊自下而上的遍歷結果如下:

(2)右邊的自下而上的遍歷結果:

(3)最後結果如下:

**如下:

public treenode lowestcommonancestor

(treenode root, treenode p, treenode q)

if(root == null)

treenode l =

lowestcommonancestor

(root.left, p, q)

; treenode r =

lowestcommonancestor

(root.right, p, q)

;// 先保證自己是非空的

if(root == null || p.val == root.val || q.val == root.val)

// 自己不是目標節點,且孩子為空

if(l == null && r == null)

// 左右有乙個非空時,返回非空那個節點

if(l == null)

if(r == null)

// 左右不為空,就是你了

return root;

}

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

236 二叉樹最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。最近公共祖先的定義為 對於有根樹 t 的兩個結點 p q,最近公共祖先表示為乙個結點 x,滿足 x 是 p q 的祖先且 x 的深度盡可能大 乙個節點也可以是它自己的祖先 例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,nu...

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的最近公共祖先是節點3。示例 2 ...