1

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

public void printReverseInOrder() { 
     if (root != null) { 
      reverseInOrder(root, 0); 
     } 
     else { 
      System.out.println(); 
     } 
    } 

public void reverseInOrder(BSTnode h, int indent) { 
    if (h != null) { 
     for (int i = 0; i < indent; i++) { 
      System.out.print(" "); 
     } 

     indent++; 
     reverseInOrder(h.right, indent); 


     reverseInOrder(h.left, indent); 

     System.out.println(h.data); 
     indent--; 
    } 

} 

我覺得這可能是我的遞歸或我的縮進添加和減法的位置的錯誤。

+0

你能展示一些你所看到的樣品輸出? –

回答

2

這工作得很好,重新排序一些東西......

public class test { 

    public static void main(String[] args){ 
     node rootNode = new node(5); 
     rootNode.r = new node(4); 
     rootNode.l = new node(3); 
     rootNode.r.r = new node(2); 
     rootNode.r.l = new node(1); 
     rootNode.l.r = new node(6); 
     rootNode.l.l = new node(7); 

     reverseInOrder(rootNode, 0); 
    } 

    public static void reverseInOrder(node h, int indent) { 
     if (h != null) { 
     indent++; 
     reverseInOrder(h.r, indent); 

     for (int i = 0; i < indent; i++) { 
      System.out.print(" "); 
     } 
     System.out.println(h.value); 

     reverseInOrder(h.l, indent); 
     } 
    } 
} 

indent--在您的電話的到底是不是真的做任何事情,因爲函數結束,它跳回了。同樣隨着縮進量的增加,實際上在你的示例代碼中間距實際上呈指數增長(因爲它在每次輸入時都會打印空格,所以1space + 2 space + 3 space),我只是在它打印值本身之前就改變了它以添加空格(所以它總是等於縮進本身而不是縮進階乘)。

輸出看起來是這樣的:

 2 
    4 
     1 
    5 
     6 
    3 
     7 
+0

這就是我所需要的。感謝您的幫助,讓我們清楚我在哪裏搞亂了 – clifgray