簡體   English   中英

AVL樹非遞歸

[英]AVL Tree Non-Recursive

我正在學習 AVL Tree 並在遞歸代碼中獲得了 TLE。 我的導師建議迭代解決方案。 我搜索並找到了一個將父節點保存在子節點中的解決方案。 我想知道這個可能會在內存中出現問題,不是嗎? 還有另一種方法可以在 AVL Tree 中插入、刪除不需要將父項保存在子項中的內容嗎? 請給我一個提示。

實現 AVL 樹時有多種選擇: - 遞歸或迭代 - 存儲平衡因子(右高減去左高)或高度 - 是否存儲父引用

高度遞歸往往會給出最優雅的解決方案,但迭代在某些情況下可能表現更好,因此值得考慮。 您可以閱讀有關選擇的信息: http ://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_avl.aspx 並查看 Java 中的迭代實現: https ://github.com/dmcmanam/bbst-showdown

迭代(非遞歸)方法需要父引用,因為插入/刪除后需要回溯,我們可以在遞歸方法中使用堆棧回溯,而在迭代方法中我們只能使用父引用回溯。 請參閱https://en.wikipedia.org/wiki/AVL_tree#Inserthttps://en.wikipedia.org/wiki/AVL_tree#Delete

插入之后,有必要檢查每個節點的祖先是否與 AVL 樹的不變量一致:這稱為“回溯”。

這是 C 中基於 BalanceFactor 的迭代 AVL 樹實現: https ://github.com/xieqing/avl-tree

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM