如果所有元素都不同,它很容易在BST中找到最接近的共同祖先。但是如果某些值相同呢。到目前爲止,我們只是比較節點的數據,就是這樣,但現在我們需要檢查節點的地址而不是數值嗎?二叉搜索樹中的最低公共祖先
2
A
回答
1
是的,而不是隻使用您的key
進行比較,請使用(key, address of node)
進行比較。這在處理非唯一鍵時簡化了代碼。
0
沒有看到你使用的是什麼樣的結構,就很難給具體,但你可以嘗試這樣的東西僞代碼:
struct BST {
struct BST* parent;
struct BST* left;
struct BST* right;
void* value;
}
find_common_ancestor(struct BST* x, struct BST* y)
{
set<struct BST*> ancestors;
// Add all of x's ancestors to set.
while (true) {
ancestors.insert(x);
if (x == NULL)
break;
x = x=>parent;
}
// Check y's ancestors against x's until a match is found.
while (true) {
if (ancestors.count(y) > 0)
return y;
y = y->parent;
}
}
0
這裏是psudocode。只是將它們轉換成語法。
GETLeastCommonAn(BINARYTREE BT, NODE A, NODE B)
IF Root==NIL
return NIL
ENDIF
IF Root==A OR root==B
return Root
ENDIF
Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)
IF Left! = NIL AND Right! = NIL
return root
ELSEIF Left! = NIL
Return Left
ELSE
Return Right
ENDIF
相關問題
- 1. 二叉樹的最低公共祖先(不是二叉搜索樹)
- 2. 最低公共祖先解釋二進制搜索樹的代碼
- 3. 二叉樹中的最低公共祖先,閱讀輸入和算法
- 4. 查找二叉搜索樹中兩個節點的最低共同祖先 - 高效
- 5. 最低公共祖先 - 代碼說明
- 6. 最低公共祖先(升壓圖)
- 7. 在二叉樹非遞歸版本中最少見的祖先搜索 - Java
- 8. 二叉樹中最大的二叉樹搜索樹
- 9. python最低共同祖先
- 10. 更多本地化,高效最低公共祖先算法給出多個二叉樹?
- 11. 從祖先矩陣創建二叉樹
- 12. 二叉樹廣度優先搜索
- 13. 二叉樹到二叉搜索樹(BST)
- 14. 二叉樹的第一個共同祖先
- 15. 尋找最少在二叉樹中的共同祖先o(h^2)換一個
- 16. 二叉搜索樹
- 17. 二叉搜索樹
- 18. 二叉搜索樹
- 19. 二叉搜索樹
- 20. 二叉搜索樹
- 21. 二叉搜索樹
- 22. 二叉搜索樹
- 23. 二叉搜索樹
- 24. Neo4j的最低共同祖先
- 25. 二叉搜索樹Clojure中
- 26. 如何找到一棵樹的最低共同祖先?
- 27. 給定節點對的最低公共祖先
- 28. 最低公共祖先算法的實際應用是什麼?
- 29. SQL:查找hierarchyids的最低公共祖先
- 30. 查找XML節點集的最低公共祖先
@ swiss:你沒有給任何節點的父字段。如果父節點被賦予,那麼BST的使用會是什麼。 :P –
@arvind mohan:沒有什麼能阻止BST實現從指向其父節點的指針。誠然,這在技術上並不需要,但它確實使某些事情更容易 - 就像你正在做的事情一樣。即使你沒有給出父指針,你也可以走樹來創建一個包含x和y祖先的集合;你可以在while循環中使用它而不是父指針。 – Swiss