一本通 1364:二叉树遍历(flist) (中序 + 层序序列确定二叉树, 队列)

本文介绍了如何通过中序遍历(DBEAC)和层序遍历(ABCDE)序列来构建二叉树。使用数组记录字符在中序序列的位置,并用队列模拟层序遍历过程,确定节点及其子节点的关系。通过判断中序序列中节点的相邻字符是否已访问,确定其左右子树的存在。
摘要由CSDN通过智能技术生成

1、这里用 数组 indx[i] 记录字符的 ASCII 码是 i 的字母在中序字符串 s1 的下标
vis[i] 字符的 ASCII 码是 i 的字母表示是否进过队列(也就是否被访问过)
2、用 队列 queue 模拟二叉树的层序遍历建立过程, 用题目样例说明
中序 DBEAC
层序 ABCDE

显然 节点 A 是根节点,然后 A 进队列, A 出列,判断A是否有左子树和右子树,
在中序序列 s1 中找到 A 字母,判断A的相邻两个字母是否被访问过。
EAC, E没有被访问过, 所以A有左子树, 那么 中序序列, B 进队列, B 是A的左子树根节点
C没有被访问过, 所以A有右子树, 那么 中序序列, C 进队列, C 是A的左子树根节点
一直扫描 层序 序列,重复这个动作,就可以建立一颗二叉树。
中序序列的左右,是判断某个节点是否有左右孩子节点。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
using namespace std;
const int MaxN = 10010;
char s1[MaxN], s2[MaxN];
bool vis[MaxN];
int indx[MaxN];

typedef struct Node
{
   
	char data;
	Node* lchild;
	Node* rchild;
}node, *pNode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值