二叉樹的任意兩個結點的最小公共父親結點

2021-09-28 19:51:16 字數 1253 閱讀 7539

在這裡介紹兩種方法:中序法、後序法

1.後序法:主要利用的是後序遍歷的時候,棧裡面存放的是此時的這個結點的所有的父親結點,所以這個時候只要將兩個結點的父親序列都取出來,然後進行對齊,之後兩個指標同時移動,當指標所指向的內容相等的時候就找到了那個最小的公共父親結點

treenode

*lowestcommonancestor

(treenode

* p, treenode

* q)

while

(!st.

empty()

&& tag.

top())

else

} st.

pop();

tag.

pop();

cur =

nullptr;}

if(!st.

empty()

)}if(res1.

size()

< res2.

size()

)int i = res1.

size()

- res2.

size()

;for

(; i >

0; i--

)while

(res1.

top(

)!= res2.

top())

return res1.

top();

}

2.中序法:通過中序遍歷來尋找最小的公共父親結點的思路如下:首先和中序一樣,將每個結點及其左節點入棧,然後開始出棧列印的時候判斷一下是否是我們要找的結點,如果是的話,就也出棧,然後看自己是不是結點,是的話就直接列印本節點,不是的話就進入它的右邊開始找,這個時候右邊如果找到的時候就返回此時的tmp,tmp會跟隨結點變化

treenode

*lowestcommonancestori

(treenode

* p, treenode

* q)if(

!st.

empty()

)if(cur == p || cur == q)

else

} st.

pop();

cur = cur-

>m_right;}}

return

nullptr

;}

完全二叉樹兩個結點的公共結點

1 2 3 4 5 6 7 如上圖所示,由正整數 1,2,3,組成了一棵無限大的二叉樹。從某乙個結點到根結點 編號是1的結點 都有一條唯一的路徑,比如從5到根結點的路徑是 5,2,1 從4到根結點的路徑是 4,2,1 從根結點1到根結點的路徑上只包含乙個結點1,因此路徑就是 1 對於兩個結點x和y,...

求二叉樹中任意兩個結點的距離

實現步驟 計算跟到第乙個結點的距離 計算跟到第二個結點的距離 計算lca 計算跟到lca結點的距離 結果為 1 2 2 4 因為重複計算了兩次的從跟到lca結點的距離 class node object def init self value 0 self value value self left...

二叉樹找到兩個結點的最近公共祖先

面試題68 i.二叉搜尋樹的最近公共祖先 這是乙個二叉搜尋樹,根節點左邊的數都小於根節點,根節點右邊的數都大於根節點。如果兩個結點的值都小於根節點的值,兩個結點一定都在樹的左邊。都大於根節點的值,那麼兩個結點一定都在樹的右邊。如果乙個大於根節點,乙個小於根節點,那麼根節點一定是最近的公共祖先。總結一...