原题目:MFOJ P1339-二叉树遍历
题目:描述
给你一棵 n(1≤n≤10) 个结点的二叉树,请你输出它的先序遍历、中序遍历、后序遍历
格式
输入
第一行一个正整数 n,表示二叉树的结点个数,编号为 1∼n。
第二行开始,连续 n 行,每行三个正整数 u,l,r,表示 u 的左儿子 l 和右儿子 r,若没有儿子,则相应的位置为 0。
输出
输出 3 行,每行 n 个正整数,分别表示该二叉树的先序遍历、中序遍历、后序遍历,中间用一个空格隔开。
示例
输入数据1
6 1 5 6 5 2 3 2 0 0 3 4 0 6 0 0 4 0 0
输出数据1
1 5 2 3 4 6 2 5 4 3 1 6 2 4 3 5 6 1思路:
(本文主要是探讨代码实现,就不再放先中后三种遍历的图示和讲解了,CSDN上有许多大佬做过这种内容,各位可以去搜索阅读)
这题的模板性挺强的
不过要我们干什么都已经写的不能再清楚了,那就...
上!代!码!
先序遍历:中→左→右
void fs(int &rt){
if(rt!=0){
cout<
中序遍历:左→中→右
void md(int &rt){
if(rt!=0){
md(nd[rt].lchild);//左儿子
cout<
后序遍历:左→右→中
void bk(int &rt){
if(rt!=0){
bk(nd[rt].lchild);//左儿子
bk(nd[rt].rchild);//右儿子
cout<
那么,把它们都加到代码里就行了!
#include
using namespace std;
const int N=17;
struct node{
int v;//节点的值
int lchild,rchild;//左、右儿子
}nd[N];//定义节点
void fs(int &rt){//先序遍历
if(rt!=0){
cout<>n;
for(int i=1,u,l,r;i<=n;i++){
cin>>u>>l>>r;
nd[u].v=u;//记录节点值(这里以节点值作为数组下标,是为了方便在遍历时进行查找)
nd[u].lchild=l;//记录节点左儿子
nd[u].rchild=r;//记录节点右儿子
}
fs(root);
cout<<"n";
md(root);
cout<<"n";
bk(root);
return 0;
}
本人第一次写博客,可能有些纰漏,还请各位大佬多多批评指点!



