二叉树的遍历

题目描述

给出一个 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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值