树的遍历(概念与习题)

本文介绍了树的先序、中序和后序遍历概念,并提供了利用中序和后序求先序遍历,以及先序和中序求后序遍历的解题思路。通过实例解析了如何递归地进行遍历操作,帮助读者理解和掌握树的遍历技巧。
摘要由CSDN通过智能技术生成

树的遍历概念
首先我们观察三种遍历方式对根、左、右结点的遍历顺序
先序的遍历顺序:根 – 左 – 右
中序的遍历顺序:左 – 根 – 右
后序的遍历顺序:左 – 右 – 根

遍历顺序可以理解为 优先级
先序遍历举例:
若一个节点有左子树和右子树,那它下一步将会先走向左子树,等到左子树的全部节点遍历完了,它才会遍历右子树。

现在我们来判断下面这棵树的先序遍历
树
树的先序遍历顺序:GDAFEMHZ
当然,树的中序遍历与先序遍历相似:有左子树就先遍历,若没有左子树则遍历节点的根,再遍历右子树。
树的中序遍历顺序:ADEFGHMZ
树的后序遍历顺序:AEFDHZMG

习题练习

①求先序排列

题目描述
已知树的中序和后序,求先序。
输入
BADC
BDCA
输出
ABCD


解题思路
①、先序遍历是从根开始的,我们可以通过后序找到树的根,再通过中序得到左子树、右子树。
②、先遍历左子树、再遍历右子树的方式不断找子树的根结点并输出,最终得到先序遍历。

样例分析
题目提供:中序ACGDBHZKX,后序CDGAHXKZB。
①、找到主根B;
②、由于中序遍历的性质,我们可以得到左子树 ACGD和右子树 HZKX。
③、对应可找到后序遍历CDGA和HXKZ(从头找即可)
从而问题就变成求左子树再求右子树:
左子树中序遍历ACGD,后序遍历CDGA。
右子树中序遍历HZKX, 后序遍历HXKZ。
接着递归,按照①~③步骤。
找到左子树的根A,再分为两棵子树。右子树的根Z,再分为两棵子树。
就按这样一直做下去(先输出根,再递归)。

模板:
step1:找到根并输出
step2:将中序,后序各分为左右两棵子树;
step3:递归,重复step1,2;

//不断找根结点 
#include<bits/stdc++.h>
using namespace std;

void dfs(string s1, string s2)
{
   
	char gen = s2[s2.length(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值