2017-08-09 59 views
1

我有一个红黑树。设置递归调用数限制 - Java

我想打印它的顺序(所以数字将从最小到最大打印)。

这里的印刷方法:

public void printTreeInOrder(Node node){ 
     //in-order printing (sorted) 
     if (!(isNull(node))){ 
      printTreeInOrder((node.getLeft())); 
      System.out.println(node.getValue()); 
      printTreeInOrder(node.getRight()); 
     } 
    } 

但是我只想打印k个最小号。如果我可以限制递归调用的次数,例如保持一个小数位数并计算该方法被调用的次数,那将很容易。

但我怎么在递归函数?

我想了一个全局变量k和功能指望它,但它不好听,,k是一个变量本身,它不是恒定的。 我有一种方法可以计算在递归函数中打印的数字数量吗?

谢谢,

艾伦

+2

我知道这并不回答这个问题......但在实践中这种递归的迭代版本往往会表现得更好,并像早期停止的一些东西是稍微向前伸直(亦即。'''如果(--k == 0)return;''')。对于这种遍历,你需要一个'''Stack >'''其中Action是一个'''enum Action {GO_LEFT,PRINT,GO_RIGHT}''' –

+0

似乎一方面你想限制遍历的深度,同时你想要底部K数....你是否真的想要说要限制要打印的数字的数量(K)?如果希望始终获得最小的数字,则无法限制遍历的深度。请纠正你的问题 –

+0

@ValentinRuano我其实不知道你的意思。我只想打印树中n个数字中的k个数字,然后按顺序排序。我看不出矛盾。 – Alan

回答

2

该方法返回剩余的要被打印元件的数量和接受从该节点被打印元件的最大数目。

public int printTreeInOrder(Node node, int k){ 
    //in-order printing (sorted) 
    if (k>0 && !(isNull(node))){ 
     k = printTreeInOrder(node.getLeft(),k); 
     if (k>0) { 
      System.out.println(node.getValue()); 
      k--; 
     } 
     return printTreeInOrder(node.getRight(),k); 
    } 
    return k; 
} 
+0

谢谢!诀窍吗。 – Alan