首先想一下
一.如果是搜尋二叉樹的話
可以採用遞迴的方式
思路:樹的根節點作為尋找的起點,把根節點作為當前節點
1.如果這兩個節點都大於當前節點,那麼這兩個節點的最低祖先肯定在當前節點節點的右子樹中,然後在當前節點的右子樹中找
2.如果兩個節點的都小於當前節點節點,那麼這兩個節點的最低祖先肯定在當前節點節點的左子樹中,然後在當前節點的左子樹中找
3.如果當前節點大於其中乙個節點,並小於另乙個節點,這個節點就是他們的最低公共祖先
那麼13和15的公共節點是誰呢?
如果我們認為15就是這兩個節點的公共節點,那麼當我們判斷到當前節點與等於我們有的兩個節點的其中乙個的時候,此時當前節點就是最低公共父節點。
如果我們認為10才是兩個節點的公共節點的話,我們只需要判斷當前節點左右孩是否等於這個節點中的其中乙個,如果等於當前節點就是最低父節點。
二.如果不是搜尋二叉樹,甚至不是普通樹呢,不過每個節點有父節點的位址
根據每個節點最多只有乙個父節點的特點,我們可以把乙個節點到根節點的過程看成一條鍊錶,然後這個問題就變成了尋找鍊錶的第乙個公共節點了。
三.加大難度,如果既不是二叉樹,也沒有也沒父節點的位址該怎麼做
從根節點開始,根節點作為當前節點
遍歷整棵樹,判斷是否兩個節點都在這棵樹里,如果在的話,就繼續判斷是否兩個節點都在當前節點的左子樹里,如果都不在左子樹里,就判斷是否在右子樹里,如果乙個在左子樹中乙個在右子樹中,就說明當前節點就是最低父節點。如果全都在左子樹中或者右子樹中就繼續判斷他們的左右孩子中是否有這兩個節點。
樹中兩個節點的最低公共祖先
假設是二叉搜尋樹 二叉搜尋樹是乙個排序的二叉樹,左子樹的結點小於根結點,右子樹的結點大於根結點 故找到乙個結點,使其大於左子結點小於右子結點即可。public static treenode getlastcommonnode treenode root,treenode p,treenode q ...
樹中兩個節點的最低公共祖先
題目 輸入一棵樹的兩個節點,返回他們的最低公共祖先。當這棵樹是二叉查詢樹時 用遞迴從樹的根節點開始遍歷。private treenode find treenode node1,treenode node2,treenode root if val如果這棵樹只是一顆普通的樹,但是擁有指向父節點的指標...
樹中兩個節點的最低公共祖先
1.二叉查詢樹 對於二叉搜尋樹,公共祖先的值一定大於等於較小的節點,小於等於較大的節點。換言之,在遍歷樹的時候,如果當前結點大於兩個節點,則結果在當前結點的左子樹里,如果當前結點小於兩個節點,則結果在當前節點的右子樹里。public treenode lowestcommonancestor tre...