樹中兩個節點的最低公共祖先

首先想一下

一.如果是搜索二叉樹的話

可以採用遞歸的方式

思路:

樹的根節點作爲尋找的起點,把根節點作爲當前節點

1.如果這兩個節點都大於當前節點,那麼這兩個節點的最低祖先肯定在當前節點節點的右子樹中,然後在當前節點的右子樹中找

2.如果兩個節點的都小於當前節點節點,那麼這兩個節點的最低祖先肯定在當前節點節點的左子樹中,然後在當前節點的左子樹中找

3.如果當前節點大於其中一個節點,並小於另一個節點,這個節點就是他們的最低公共祖先

 

那麼13和15的公共節點是誰呢?

如果我們認爲15就是這兩個節點的公共節點,那麼當我們判斷到當前節點與等於我們有的兩個節點的其中一個的時候,此時當前節點就是最低公共父節點。

如果我們認爲10纔是兩個節點的公共節點的話,我們只需要判斷當前節點左右孩是否等於這個節點中的其中一個,如果等於當前節點就是最低父節點。

 

二.如果不是搜索二叉樹,甚至不是普通樹呢,不過每個節點有父節點的地址

根據每個節點最多隻有一個父節點的特點,我們可以把一個節點到根節點的過程看成一條鏈表,然後這個問題就變成了尋找鏈表的第一個公共節點了。

 

 

三.加大難度,如果既不是二叉樹,也沒有也沒父節點的地址該怎麼做

從根節點開始,根節點作爲當前節點

遍歷整棵樹,判斷是否兩個節點都在這棵樹裏,如果在的話,就繼續判斷是否兩個節點都在當前節點的左子樹裏,如果都不在左子樹裏,就判斷是否在右子樹裏,如果一個在左子樹中一個在右子樹中,就說明當前節點就是最低父節點。如果全都在左子樹中或者右子樹中就繼續判斷他們的左右孩子中是否有這兩個節點。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章