2014年第三题
根据题目要求,先建树,建好树之后进行遍历即可
#include <iostream>
using namespace std;
struct Node
{
int val;
Node *lchild;
Node *rchild;
};
Node Tree[10000];
int local;
void preOrder(Node* T)
{
cout << T->val << ' ';
if (T->lchild != NULL)
{
preOrder(T->lchild);
}
if (T->rchild != NULL)
{
preOrder(T->rchild);
}
}
void inOrder(Node* T)
{
if (T->lchild != NULL)
{
inOrder(T->lchild);
}
cout << T->val << ' ';
if (T->rchild != NULL)
{
inOrder(T->rchild);
}
}
void postOrder(Node* T)
{
if (T->lchild != NULL)
{
postOrder(T->lchild);
}
if (T->rchild != NULL)
{
postOrder(T->rchild);
}
cout << T->val << ' ';
}
Node* creat()
{
Tree[local].lchild = Tree[local].rchild = NULL;
local++;
return &Tree[local-1];
}
Node* insert(Node* T,int a,int b,int c)
{
if (T->val == a)
{
if (b != -1)
{
Node *p = creat();
p -> val = b;
T -> lchild = p;
}
else T->lchild = NULL;
if (c != -1)
{
Node *q = creat();
q -> val = c;
T -> rchild = q;
}
else T->rchild = NULL;
return T;
}
else if (T->val != a)
{
if (T->lchild != NULL)
{
T->lchild = insert(T->lchild,a,b,c);
}
if (T->rchild != NULL)
{
T->rchild = insert(T->rchild,a,b,c);
}
}
return T;
}
int main()
{
int n;
cin >> n;
local = 0;
Node *T = creat();
T -> val = 0;
for (int i = 0;i < n;i++)
{
int a,b,c;
cin >> a >> b >> c;
T = insert(T,a,b,c);
}
preOrder(T);
cout << endl;
inOrder(T);
cout << endl;
postOrder(T);
cout << endl;
}