找兩個節點的最近公共祖先

2021-09-27 06:51:30 字數 855 閱讀 7779

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

例如,給定如下二叉樹: root = [3,5,1,6,2,0,8,null,null,7,4]

分三種情況:

如果這兩個節點其中乙個是根節點,直接返回根節點

如果乙個結點在左子樹,另乙個在右子樹,直接返回根節點

如果兩個都在左子樹或者都在右子樹上,直接使用遞迴返回最近公共祖先。

class solution 

if(r==t)

if(search(r.left,t))

if(search(r.right,t))

return false;

}public treenode lowestcommonancestor(treenode root, treenode p, treenode q) //這兩個節點至少乙個是根節點

boolean ph=search(root.left,p);

boolean pf=search(root.right,q);

boolean phi=search(root.right,p);

boolean pfi=search(root.left,q);

if(ph&&pf||phi&&pfi) // 乙個在左子樹,乙個在右子樹

if(ph&&pfi)

return lowestcommonancestor(root.right,p,q); //兩個都在右子樹

}}

這個演算法時間複雜度較高,相對節省空間。

求兩個節點的最近公共祖先節點

原文 分三種情況 1 搜尋二叉樹,根據搜尋二叉樹的性質,左子樹的所有節點比根節點小,右子樹的所有節點比跟節點大。如果兩個節點都比根節點小,則遞迴左子樹 如果兩個節點都比跟節點大,則遞迴右子樹 否則,兩個節點乙個在左子樹,乙個在右子樹,則當前節點就是最近公共祖先節點。2 二叉樹有指向父節點的指標。問題...

求樹中兩個節點的最近公共祖先(版本2)

1.求樹中兩個節點的最近公共祖先 版本2 我們來看 這個問題 的 第二種解析思路 在第一種思路中,我們將 這個題意理解為,這棵樹是一顆二叉搜尋樹.在第二種思路中,我們將 這棵樹,理解為一顆普通的樹,或許它都不是二叉樹,不過這不重要 不過為了方便測試,我們將用結點中含有指向父節點指標的二叉樹進行測試 ...

找兩個鍊錶的公共節點

首先考慮兩個鍊錶無環的情況。將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位 次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。如下。其...