遍历二叉树
遍历二叉树
时间限制: 1.000 Sec 内存限制: 128 MB
题目描述
求一棵二叉树的先序中序后序遍历。
这棵二叉树的先序遍历是:6 1 2 4 5 3
这棵二叉树的中序遍历是:4 2 5 1 3 6
这棵二叉树的后序遍历是:4 5 2 3 1 6
这棵二叉树的先序遍历是: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号节点的 左孩子和右孩子编号
第2行两个数据 表示 1号节点的 左孩子和右孩子编号
第3行两个数据 表示 2号节点的 左孩子和右孩子编号
……
第n+1行两个数据 表示 n号节点的 左孩子和右孩子编号
输出
3行数据,每行有n个数,空格隔开。
第1行 是先序遍历
第2行 是中序遍历
第3行 是后序遍历
第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; }