二叉樹的最近公共父節點

2021-09-13 14:08:13 字數 876 閱讀 5700

給定一棵二叉樹和兩個節點,找出這兩個節點最近的乙個公共父節點。

給出的兩個節點一定在樹中存在;

結點的值是隨機的,可能會重複,結點中只包含left和right兩個子結點,沒有指向父節點的parent。

此題可參考leetcode 236。

考慮兩個結點的存在情況:

乙個節點為是另外乙個節點的子或孫子節點,此時只要判斷root節點等於其中乙個節點即可;

兩個節點分屬兩支,此時兩個節點都是root節點的子或孫結點,同時在root.left和root.right中各能找到乙個節點;

如果不屬於以上兩種情況,對root.left和root.right遞迴判斷。

還有一種比較直接的方法,分別找出從root節點到兩個結點的路徑並儲存到乙個煉表裡,再對路徑比較得到最近公共父節點。

1、遞迴方法

/*class treenode 

*} */

public treenode findancestor

(treenode root, treenode node1, treenode node2)

2、直接法

public treenode findancestor

(treenode root, treenode node1, treenode node2)

return res;

}private

boolean

getpath

(treenode root, treenode node, list

path)

if(root.right != null)

reture false

;}

二叉樹 最近公共父節點

給定二叉樹中的任意兩點,求解該兩點的最近公共父節點。程式大致分為遞迴和非遞迴兩種方式,下面我們先來認識非遞迴的方式。非遞迴程式總體的思路 用一種常見高效的資料結構來記錄下二叉樹中的結構關係,由於是找父節點,所以要用子節點來查詢父節點,我們這裡用到的是hashmap來進行樹形關係的儲存。接下來就是先列...

二叉樹的公共父節點

void findparent node root,node pt1,node pt2 1 對於二叉搜尋樹,裡邊的元素都是排好序的,那麼從根節點向下搜尋,找到第乙個節點p滿足p data pt1 data 且 p data pt2 data 假定pt1 data pt2 data 即是滿足要求的公共...

二叉樹近期公共父節點

在二叉樹中找近期公共父節點。分為兩種情況,一種是有父指標,一種沒有父指標。這樣的情況比較簡單。計算兩個結點的深度,再把深度大的向上移。移到同一深度。在同一時候向上移動,直到兩個結點同樣,這樣便找到了父節點。這個演算法時間複雜度為o n 實現 includestruct node int getdpe...