我一直在寻找这个好几个小时,但我找不到我想要的代码。
for example array is : 45 16 22 51 18 72 33 64 40
binary must be : 45 16 0 22 0 72 0 0 18 33 0 0 64 0 0 0 0
它根据2n+1
和2n+2
放置,但我不知道如何在代码中执行此操作。我应该使用pop和push吗?
45
16 51
22 72
18 33 64
40
答案 0 :(得分:2)
算法如下。
First convert the unsorted array into a sorted one.
现在使用已排序的数组,执行以下操作:
Return if all elements are inserted.
Pick the middle element (cur_index). Create a node with it.
Call left from left_index to (cur_index-1).
Call right from to (cur_index+1) to right_index.
答案 1 :(得分:0)
如果给定的数组是[n]而b [MAX]是二叉树数组,则算法可以是这样的,
for(i=0;i<MAX;i++)
b[i]=-1;
b[0]=a[0];
j=0;
for(i=1;i<n;i++)
{
lable1:
if(b[j]<a[i])
{
k=2j+2;
}
else
{
k=2j+1;
}
if(b[k]==-1)
{
b[k]=a[i];
j=0;
}
else
{
j=k;
goto: lable1
}
}
for(i=0;i<MAX;i++)
if(b[i]==-1)
b[i]=0;
最后将所有具有-1值的位置替换为0以完成二叉树表示。这段代码只是为了说明如何实现它。我用-1表示空位。您可以使用任何可能不作为输入的特殊值。和MAX值是二进制树大小,你可以计算,给定n。