由于本题洛谷没有给出题解,特在此记录自己的解决办法!
题目如下:
题目链接
#include <bits/stdc++.h>
typedef struct BNode{
int data;
struct BNode* rchild;
struct BNode* lchild;
}BNode,*BTree;
void preorder(BTree T){ //二叉树的前序遍历
if(T){
cout << T->data<<" ";
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BTree T){ //二叉树的中序遍历
if(T){
inorder(T->lchild);
cout << T->data<<" ";
inorder(T->rchild);
}
}
void postorder(BTree T){ //二叉树的后序遍历
if(T){
postorder(T->lchild);
postorder(T->rchild);
cout << T->data<<" ";
}
}
int main()
{
int n;
cin >> n;
int a[n+1][2]={0};
for(int i=1;i<=n;i++)
{
cin >> a[i][0]>>a[i][1];
}
BTree tree[n+1]; //创建n+1个结构体指针(0不用,方便)
for(int i=1;i<=n;i++)
{
tree[i] = new BNode;//创建结点实体
tree[i]->data = i;
}
for(int i=1;i<=n;i++)
{
if(a[i][0]!=0)
tree[i]->lchild = tree[a[i][0]];
else tree[i]->lchild = NULL;
if(a[i][1]!=0)
tree[i]->rchild = tree[a[i][1]];
else tree[i]->rchild = NULL;
}
BTree T = tree[1]; //指向根节点
preorder(T);
cout <<endl;
inorder(T);
cout << endl;
postorder(T);
return 0;
}