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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值