遍历二叉树

遍历二叉树

时间限制: 1.000 Sec  内存限制: 128 MB

题目描述

求一棵二叉树的先序中序后序遍历。

这棵二叉树的先序遍历是:6 1 2 4 5 3
这棵二叉树的中序遍历是:4 2 5 1 3 6
这棵二叉树的后序遍历是:4 5 2 3 1 6

输入

第一行一个整数n,表示树的节点编号是1到n。n不超过1000.
第2行两个数据 表示 1号节点的 左孩子和右孩子编号
第3行两个数据 表示 2号节点的 左孩子和右孩子编号
……
第n+1行两个数据 表示 n号节点的 左孩子和右孩子编号

输出

3行数据,每行有n个数,空格隔开。
第1行 是先序遍历
第2行 是中序遍历
第3行 是后序遍历

样例

输入
6
2 3
4 5
0 0
0 0
0 0
1 0
输出
6 1 2 4 5 3
4 2 5 1 3 6
4 5 2 3 1 6
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
struct rode{int l,r;}tree[1005];
int qx[1005],zx[1005],hx[1005];
int x,y,z;
void dfs(int n){
    qx[++x]=n;
    if(tree[n].l!=0) dfs(tree[n].l);
    zx[++y]=n;
    if(tree[n].r!=0) dfs(tree[n].r);
    hx[++z]=n;
}
int main()
{
    int roof=1;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>tree[i].l>>tree[i].r;
        if(tree[i].l==roof||tree[i].r==roof) roof=i;
    }
    dfs(roof);
    for(int i=1;i<n;i++) cout<<qx[i]<<" ";cout<<qx[n]<<endl;
    for(int i=1;i<n;i++) cout<<zx[i]<<" ";cout<<zx[n]<<endl;
    for(int i=1;i<n;i++) cout<<hx[i]<<" ";cout<<hx[n]<<endl;
  return 0;
}

 

posted @ 2022-08-01 21:07  ciciio  阅读(31)  评论(0编辑  收藏  举报