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

我觉得这可能是我的递归或我的缩进添加和减少的位置的错误。

这很好用,重新排序了一些东西……

 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.rr = new node(2); rootNode.rl = new node(1); rootNode.lr = new node(6); rootNode.ll = new node(7); reverseInOrder(rootNode, 0); } public static void reverseInOrder(node h, int indent) { if (h != null) { indent++; reverseInOrder(hr, indent); for (int i = 0; i < indent; i++) { System.out.print(" "); } System.out.println(h.value); reverseInOrder(hl, indent); } } } 

你的indent--在你的通话结束时并没有真正做任何事情,因为函数结束并且它会跳回来。 此外,当缩进增加时,间距实际上在您的示例代码中呈指数级增长(因为它在每次输入时打印空格,因此1space + 2空格+3空格),我只是将其更改为仅在打印值本身之前添加空格(所以它总是等于缩进本身而不是缩进阶乘)。

输出看起来像这样:

  2 4 1 5 6 3 7