[英]Splay Tree Deletion
我無法概念化從 splay 樹中刪除的過程。 給定這個初始樹,我想刪除節點 78。
根據我的課程中的信息(來自 Goodrich、Tamassia 和 Goldwasser),BST 中刪除的節點應該替換為通過執行從應該是 91 的節點開始的順序遍歷到達的下一個節點。然后這個節點應該展開到樹的頂端。 但是,此處的可視化工具顯示的情況並非如此。 https://www.cs.usfca.edu/~galles/visualization/SplayTree.html
可視化器將 78 替換為其前任 (70) 並展開該節點。 (有序后繼,即排序后的下一個鍵是 83,而不是 91。)一般來說,張開的樹具有極好的延展性,只要您將剛剛下降的路徑的長度大約減半,同時使其他路徑在大多數時間長一點,從漸近性能的角度來看,您是正確的(但是,您的教授可能有不同的想法)。
你的教科書描述:
BST 中刪除的節點應該被從應該是 91 的節點執行順序遍歷到達的下一個節點替換
該描述適用於非平衡 BST(二叉搜索樹),但不適用於大多數各種平衡二叉樹,也不適用於 Splay 樹。 要刪除 splay 樹中的節點,請執行以下操作:
這就是https://www.cs.usfca.edu/%7Egalles/visualization/SplayTree.html上的可視化所做的。
您在對另一個答案的評論中說:
所以在實踐中,您選擇的節點來替換已刪除的節點並不重要,即影響性能等。
在典型的 splay 樹刪除算法中,要替換的節點將是前驅節點或后繼節點,按密鑰順序排列。
經驗法則是在訪問特定節點時始終張開。 找到要刪除的節點,然后展開到根節點。 找到它的前身,然后展開它到根。 還有一些變化,您也可以不那么激進地張開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.