题目描述
给出一个 n 个结点的二叉树,请求出二叉树的前序遍历,中序遍历和后序遍历。
【样例解释】
样例对应的二叉树如图所示:
输入描述
第一行有一个整数 n (0<n≤26),表示二叉树有 n 个结点;
以下 n 行,每行第一个为一个大写字母表示结点的值,第 i+1 行的结点编号为 i。
后面为两整数,第一个表示该结点左孩子结点编号,第二个表示该结点右孩子的结点编号,如果该编号为 0 0 表示没有;(编号为 1 的结点是树的根)
输出描述
共三行,第一行为二叉树的前序遍历,第二行为中序遍历,第三行为后序遍历;
前序遍历是根左右
中序遍历是左根右
后序遍历是左右根
先输入二叉树,这里二叉树要用结构体来存储
先定义一个结构体node,存储当前节点值,左孩子编号和右孩子编号
struct node{
char me;
int l,r;
}a[1001];
接着写先、中、后序遍历的函数
只需要三个步骤,遍历左,遍历右,输出根
先序遍历代码如下:
int x(int bt){
if(bt){
cout<<a[bt].me;
x(a[bt].l);
x(a[bt].r);
}
return 0;
}
中序和后序只需将遍历左,遍历右,输出根三个步骤调换顺序就行了
整体代码如下:
#include<bits/stdc++.h>
#include<unistd.h>
using namespace std;
struct tree{
char me;
int l,r;
}a[1001];
int x(int bt){
if(bt){
cout<<a[bt].me;
x(a[bt].l);
x(a[bt].r);
}
return 0;
}
int z(int bt){
if(bt){
z(a[bt].l);
cout<<a[bt].me;
z(a[bt].r);
}
return 0;
}
int h(int bt){
if(bt){
h(a[bt].l);
h(a[bt].r);
cout<<a[bt].me;
}
return 0;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].me>>a[i].l>>a[i].r;
}
x(1);
cout<<endl;
z(1);
cout<<endl;
h(1);
return 0;
}