我一直在寻找一种方法来完成这种非递归方法几个小时。我们的编程老师要求我们完成相同方法的递归和非递归实现,用于在控制台中显示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;是什么? ?提前致谢。