一、题目概述
依据给定二叉树结构,建立二叉排序树,并输出层序遍历序列。
二、思路
中序遍历建树,层序遍历输出;
三、代码
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef struct
{
int key, rchild, lchild;
}node;
vector<node> tree(100);
vector<int> a(100);
int N, index = 0, p;
void inorder( int t )
{
if( t != -1 )
{
inorder( tree[t].lchild );
tree[t].key = a[index++];
inorder( tree[t].rchild );
}
}
int main()
{
queue<int> q;
scanf("%d", &N);
for( int i = 0; i < N; ++i )
scanf("%d %d", &tree[i].lchild, &tree[i].rchild);
for( int i = 0; i < N; ++i )
scanf("%d", &a[i]);
sort( a.begin(), a.begin() + N );
inorder(0);
q.push(0);
while( q.size() )
{
p = q.front();
q.pop();
printf("%s%d", p ? " ":"", tree[p].key);
if( tree[p].lchild != -1 )
q.push( tree[p].lchild );
if( tree[p].rchild != -1 )
q.push( tree[p].rchild );
}
}