我已经构建了一个展开树,我正在尝试按顺序将其打印出来,以便当您将头转向左侧时,您可以正常方式看到树。我编写了以下代码,它输出树有点正确,但它在最右边的节点上添加了额外的空格,并没有为应该放在根节点下面的所有子节点添加空格:
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