如何在没有递归的情况下打印二进制堆树?

时间:2015-03-31 03:48:16

标签: java heap

我一直在寻找一种方法来完成这种非递归方法几个小时。我们的编程老师要求我们完成相同方法的递归和非递归实现,用于在控制台中显示BinaryHeap(我使用Eclipse)。

这是我的方法代码:

public String nonRecursivePrintFancyTree()
{
    String outputString = "";

    /**********I DON'T KNOW WHAT TO DO HERE**********/

    return outputString;
}

public String printFancyTree()
{
    return printFancyTree( 1, "");
}

private String printFancyTree(int index, String prefix)
{
    String outputString = "";

    outputString = prefix + "|__";

    if( index <= currentSize )
    {
        boolean isLeaf = index > currentSize / 2;

        outputString += array[ index ] + "\n";

        String _prefix = prefix;

        if( index%2 == 0 )
            _prefix += "|  "; // one | and two spaces
        else
            _prefix += "   " ; // three spaces

        if( !isLeaf )
        {
            outputString += printFancyTree( 2*index, _prefix);
            outputString += printFancyTree( 2*index + 1, _prefix);
        }
    }
    else
        outputString += "null\n";

    return outputString;
    }
}

完成递归方法花了我一些时间,但我无法找到一种简单的方法来完成非递归方法。

这是我的主要类,用于检查方法是否正常工作:

public class Main 
{
/**
 * Main function of the class
 */
public static void main(String[] args) 
{
    // create a Heap with 22 elements and an equivalent array
    int numItems = 22;
    BinaryHeap<Integer> heap = new BinaryHeap<Integer>();
    Integer [] items = new Integer[numItems];

    int i;
    int j;

    // elements are inserted one by one
    for (i = 11, j = 0; j != numItems; i = (i + 37), j++)
    {
        heap.insert(i);
        items[j] = i;
        i %= numItems; 
    }

    heap.buildMaxHeap();
    System.out.println("Recursive display:");
    System.out.println(heap.printFancyTree());

    System.out.println("Non recursive display:");
    System.out.println(heap.nonRecursivePrintFancyTree());  //<------this method


}

这里的显示应该是什么样的:

|__58
   |__56
   |  |__53
   |  |  |__50
   |  |  |  |__11
   |  |  |  |__39
   |  |  |__48
   |  |     |__46
   |  |     |__43
   |  |__54
   |     |__47
   |     |  |__40
   |     |  |__38
   |     |__51
   |        |__49
   |        |__null
   |__57
      |__44
      |  |__41
      |  |__42
      |__52
         |__37
         |__45

基本上,它应该为递归和非递归方法提供相同的显示。我随处可见:谷歌,这个网站,Oracle文档,甚至是我的课程手册(JAVA中的数据结构和算法分析,第3版,Mark Allen Weiss),我可以&#39;甚至找到一种可能的方法来做到这一点。我的问题是,&#34; nonRecursivePrintFancyTree&#34;是什么? ?提前致谢。

0 个答案:

没有答案