遞迴 236 二叉樹的最近公共祖先

2021-10-10 08:03:09 字數 1126 閱讀 1919

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

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

輸入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4

輸出: 5

解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。

遞迴解析:

終止條件:

當越過葉節點,則直接返回 nullnull ;

當 rootroot 等於 p, qp,q ,則直接返回 rootroot ;

遞推工作:

開啟遞迴左子節點,返回值記為 leftleft ;

開啟遞迴右子節點,返回值記為 rightright ;

返回值: 根據 leftleft 和 rightright ,可展開為四種情況;

當 leftleft 和 rightright 同時為空 :說明 rootroot 的左 / 右子樹中都不包含 p,qp,q ,返回 nullnull ;

當 leftleft 和 rightright 同時不為空 :說明 p, qp,q 分列在 rootroot 的 異側 (分別在 左 / 右子樹),因此 rootroot 為最近公共祖先,返回 rootroot ;

當 leftleft 為空 ,rightright 不為空 :p,qp,q 都不在 rootroot 的左子樹中,直接返回 rightright 。具體可分為兩種情況:

p,qp,q 其中乙個在 rootroot 的 右子樹 中,此時 rightright 指向 pp(假設為 pp );

p,qp,q 兩節點都在 rootroot 的 右子樹 中,此時的 rightright 指向 最近公共祖先節點 ;

當 leftleft 不為空 , rightright 為空 :與情況 3. 同理;

class solution 

}

236 二叉樹最近公共祖先

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

236 二叉樹的最近公共祖先 遞迴方法

此題是利用二叉樹的後序遍歷來求解最近公共祖先。遞迴的出口是遍歷到葉子結點或者當前結點 root 等於待搜尋的結點 p或者q 此時需要返回root。如果左右子樹中均沒有找到 返回null 說明p或者q都不在左右子樹,當前root肯定不是最近公共祖先。如果左右子樹均不為空,說明p和q分布在當前結點的左右...

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 ...