1

我已经建立了一棵张开的树,我试图将它反向打印出来,这样当你把头转向左边时,你可以以正常的方式看到树。我已经编写了以下代码,它输出的树有点正确,但是它在最右边的节点上添加了额外的空格,并且它没有为应该放置在根节点下方的所有子节点添加空格:

   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--;
    }

}

我觉得这可能是我的递归或缩进加减放置的错误。

4

1 回答 1

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
于 2012-10-10T22:43:27.983 回答