思想主要是:利用要排序的数据构造二叉树,然后再中序遍历二叉树即可。
方法简单,但是简历的二叉树歪斜程度较大。
时间复杂度O(nlogn), 受树的高度影响。
空间复杂度为O(n), 比较耗费空间。
#include "stdafx.h"
#include <stdio.h>
void binary_tree(int *btree, int *list, int len)
{
int i;
int level;
btree[1] = list[1];
for (i = 2; i <= len; i++)
{
level = 1;
while (btree[level] != 0)
{
if (list[i] > btree[level])
level = 2 * level + 1;
else
level = 2 * level;
}
btree[level] = list[i];
}
}
void mid_travel(int *btree, int pos)
{
if (btree[pos] != 0)
{
mid_travel(btree, 2 * pos);
if (btree[pos] != 0)
printf("%d ", btree[pos]);
mid_travel(btree, 2 * pos + 1);
}
}
int main(int argc, char* argv[])
{
int btree[2048] = {0};
int list[] = {-1,1,3,89,3,5,67,25,88,55,43,7,9,10};
int len = sizeof(list)/sizeof(list[0]);
len -= 1;
binary_tree(btree, list, len);
mid_travel(btree, 1);
return 0;
}