在c中将(un)排序的数组转换为二进制搜索树

时间:2014-03-05 19:16:41

标签: c

我一直在寻找这个好几个小时,但我找不到我想要的代码。

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+12n+2放置,但我不知道如何在代码中执行此操作。我应该使用pop和push吗?

                45
          16           51
       22                 72
   18     33           64
            40

2 个答案:

答案 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。