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--元に戻るため、呼び出しの最後では実際には何もしていません。また、インデントが増加すると、サンプルコードではスペースが実際に指数関数的に増加します(入力するたびにスペースが出力されるため、1スペース+ 2スペース+ 3スペースになるため)、値自体を出力する直前にのみスペースを追加するように変更しました(したがって、indent factorial ではなく、indent 自体と常に等しくなります)。

出力は次のようになります。

      2
    4
      1
  5
      6
    3
      7
于 2012-10-10T22:43:27.983 に答える