leetcode 二叉樹最近公共祖先

2021-10-04 10:36:10 字數 551 閱讀 4983

之前寫過一篇關於二叉搜尋樹最近公共祖先的博文,如果沒有了解過這類題目的,可以先去瞅一瞅.由於二叉搜尋樹的特性,我們可以使用類似二分搜尋的演算法搜尋兩個節點的公共祖先.此篇講解對於一般二叉樹,最近公共祖先的查詢演算法.

對於一棵普通的二叉樹,要尋找兩個節點的最近公共祖先,沒有什麼捷徑,我們只能考慮遍歷樹中的每乙個節點,判斷其是否是我們要找的最近公共祖先.進一步分析,由於題目中要求該公共祖先深度應當盡可能地大,應次我們考慮自底向上的查詢,最先查詢到的符合要求的公共祖先即是深度最大的公共祖先.對於該問題,自底向上的查詢對應的即是對二叉樹節點的後序遍歷,因此基於二叉樹後序遍歷不難實現演算法.

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

public treenode lowestcommonancestor

(treenode root, treenode p, treenode q)

}

leetcode 二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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 的最近公共祖先是節點 ...

leetcode 二叉樹的最近公共祖先

按照遞迴的思想即可解決本題。1.當root為p,q或者為null的時候返回本身 2.遞迴查詢其左右子樹 3.根據左右子樹的結果,找到規則即可。具體 如下 definition for a binary tree node.class treenode def init self,x self.val...

LeetCode 二叉樹的最近公共祖先

示例2 兩個節點p,q分為兩種情況 1 p和q在不同子樹中 遞迴遍歷左右子樹,如果左右子樹查到節點都不為空,則表明p和q分別在左右子樹中,因此,根節點即為最近公共祖先 2 p和q在相同子樹中 1 如果左子樹包含p和q,那麼到root left中繼續查詢,最近公共祖先在左子樹裡面。2 如果右子樹包含p...