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