我完成了我的任务,只是希望输出看起来不错,所以我需要一个打印方法,它可以打印二叉树的树结构(由数组表示)。
在树的数组表示中:
如果节点:我
孩子:2*i,2*i+1
家长:i/2
例如,对于数组
value 10 5 8 2 3 6 7
index 1 2 3 4 5 6 7
树表示应该是:
10 5 8 2 3 6 7
它不必与上面显示的完全相同。它可以是正确显示树的任何表示。
有人可以帮我吗?谢谢
我完成了我的任务,只是希望输出看起来不错,所以我需要一个打印方法,它可以打印二叉树的树结构(由数组表示)。
在树的数组表示中:
如果节点:我
孩子:2*i,2*i+1
家长:i/2
例如,对于数组
value 10 5 8 2 3 6 7
index 1 2 3 4 5 6 7
树表示应该是:
10 5 8 2 3 6 7
它不必与上面显示的完全相同。它可以是正确显示树的任何表示。
有人可以帮我吗?谢谢
这应该很容易。对于第一行,打印 1。第二行,打印数组元素 2、3。第三行,打印数组元素 4、5、6、7。第四排,8,9,10,11,12,13,14,15。看到图案了吗?每一行,您打印元素 2^n 到 2^(n+1) - 1,其中顶行为零。
这假设如果有一些节点没有两个孩子,那些空孩子仍然使用数组中的空间。
这是任何人的代码。(*好久没用Java写了)
public class PrintTree{
static int PowerOf2(int power)
{
return (1<<power);
}
static void PrintTreeArray(int array[], int arrayLength)
{
int currentLevel = 0;
int maxPerLevel = PowerOf2(currentLevel);
for(int i = 0; i < arrayLength; i++)
{
if(i == maxPerLevel-1)
{
System.out.println("\n");
currentLevel++;
maxPerLevel = PowerOf2(currentLevel);
}
System.out.print(" "+array[i]);
}
}
public static void main(String []args)
{
int[] array = new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
PrintTreeArray(array,15);
}
}