splay-tree

    1熱度

    2回答

    問題出在這裏: 設T是n個節點上的一個splay樹,設x是T的一個節點。考慮x處的splay操作。在x下的子樹是否必須平衡(即,在splay操作之後,在splay樹中以x爲根的子樹的高度變爲O(logn)? 我花了很多時間,但仍然感到沮喪。 ..我欣賞你的答案

    3熱度

    1回答

    我已經實現了幾個splay tree算法。 什麼是最好的方法來比較它們? 添加隨機節點時比較執行時間是一個好的開始嗎? 我還實現了一個二進制搜索樹,用於跟蹤每個節點的訪問量。我寫了一個創建最佳二叉搜索樹的方法optimize()。 如果我們不打算修改搜索樹,並且我們知道每個項目的訪問頻率,我們可以構造一個最優二叉搜索樹,它是一個搜索樹,其中查找項目的平均成本預期的搜索成本)被最小化。 我怎麼能參與

    0熱度

    2回答

    我一直在嘗試學習一些數據結構的來龍去脈,我試圖讓一個二進制splay樹正常工作。每次運行下面的代碼時,我所尋找的節點都超過了根節點,它告訴我它在那裏,然後從根節點刪除整個一面。如果節點只從頂部向下一級,它會正常工作。 我不確定發生了什麼問題,但我想它與我的旋轉功能有關。我已經正確地爲插入功能正常工作,這是我之後建模的功能。 public class SplayBST { Node roo

    1熱度

    1回答

    我有一個程序,允許用戶在二叉查找樹之間選擇一棵樹和一棵紅黑樹。我爲二叉搜索樹編寫了類,現在正在處理splay樹,但是我意識到我的與用戶交互的方法只能用於二叉搜索樹。我設置它以便它將創建一個用戶選擇的樹的實例,但在我的代碼中,只使用用戶選擇二叉查找樹時將創建的變量。我的問題是我如何使它,以便我只會創建一個用戶選擇的樹的實例,我如何只能使用一個變量,以便當我插入項目或在樹上工作時,我不必添加更多的條件

    1熱度

    1回答

    我正在爲一個彈力樹的右旋轉方法工作。當我嘗試運行我的程序時,我不斷收到空指針異常,但我不知道爲什麼。這是我的樹 5 / 2 / 1 這是我得到的空指針,它的lr分配。 lr應該是空的,因爲2沒有權利,但不應該節點只是null,然後程序應該繼續?或者因爲它是空的,我必須首先檢查2是否有權利? Node<E> p = findParent(x.getData());

    1熱度

    1回答

    我不明白splaying如何工作。 我不能遵循的部分是我們如何知道:i)zig ii)zig-zag或iii)zig-zig必須完成。 如果我理解正確,這與路徑中的當前節點有關。 如果它是根的孩子,那麼它是一個zig,否則(ii)或(iii)取決於當前節點和當前節點的父節點是否都是左(或右)子節點。好吧到目前爲止。 現在我沒有得到的部分: 當我們向下移動並不是將中間節點「移除」到左側和右側子樹中的

    2熱度

    1回答

    好的,所以這裏是splay算法,如果你想檢查。 這是我張開功能: template <class WA> void SplayTree<WA>::Do_Splay(SplayNODE<WA> *temp) //temp is the node which is to be splayed { if (temp==root) //if temp is root then {

    1熱度

    1回答

    我已經構建了一個splay樹,並且我試圖按順序將其打印出來,以便當您將頭轉向左側時,可以以正常方式查看樹。我寫了下面的代碼,它一定程度上正確輸出樹,但它在最右邊的節點上增加了額外的空間,它並不適用於所有的子節點應放置在根節點下添加空格: public void printReverseInOrder() { if (root != null) { reverseInOrd

    2熱度

    1回答

    我的代碼是 private Node rotateLeftChild(Node n) { Node o = n.left; n.left = o.right; o.right = n; return o; } 當我調用它在根旋轉的樹是這樣的: 7 /\ 4 8 /\ 1 5 它刪除4和1,

    1熱度

    1回答

    我不明白爲什麼在splay tree數據結構中的旋轉不僅考慮了評級節點的父級,還考慮了祖父級(Zig-zag和Zig-zig操作)。爲什麼下面不工作: 爲我們插入,例如,一個新的節點樹,我們檢查是否插入左或右子樹。如果我們插入左側,我們旋轉結果右,反之亦然右子樹。遞歸地,它會是這樣的 Tree insert(Tree root, Key k){ if(k < root.key){