原题链接:A1099 Build A Binary Search Tree
#include<algorithm>
#include<iostream>
#include<cstdio>
#include <queue>
using namespace std;
typedef struct BiTNode
{
int data;
struct BiTNode *lChild,*rChild;
}BiTNode, *BiTree;
BiTree Node[100], p;
int S[100], cnt = 0, N, left_index, right_index;
void inOrder(BiTree T)//中序遍历插入数据
{
if(!T) return ;
inOrder(T->lChild);
T->data = S[cnt++];
inOrder(T->rChild);
}
void levelOrder(BiTree T)//层次遍历输出即可
{
queue<BiTree> Q;
Q.push(T);
int flag = 0;
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(flag) printf(" ");//flag控制打印格式
printf("%d", p->data);
flag = 1;
if(p->lChild) Q.push(p->lChild);
if(p->rChild) Q.push(p->rChild);
}
}
int main()
{
scanf("%d", &N);
for(int i=0; i<N; i++) Node[i] = new BiTNode;//先分配好空间
for(int i=0; i<N; i++)//再根据输入搭建排序树框架
{
scanf("%d %d", &left_index, &right_index);
if(left_index == -1) Node[i]->lChild = NULL;
else Node[i]->lChild = Node[left_index];
if(right_index == -1) Node[i]->rChild = NULL;
else Node[i]->rChild = Node[right_index];
}
for(int i=0; i<N; i++) scanf("%d", &S[i]);//输入数据
sort(S, S+N);//对数据排序
inOrder(Node[0]);//再利用二叉树中序遍历是顺序排列的性质插入数据
levelOrder(Node[0]);//层次遍历输出即可
return 0;
}