一种新的求二叉树后序遍历的方法!
chloroethylene · · 休闲·娱乐
前言
很久以前在做初赛题时想到的,已知前序、中序求后序的方法。请注意本文分区。
正文
前置知识
首先我们知道,二叉树的先序遍历
- 在
p 后加入当前节点u ; - 递归处理
u 的左子树,没有左儿子则跳过; - 递归处理
u 的右子树,没有右儿子则跳过。
同理,中序遍历
- 递归处理
u 的左子树,没有左儿子则跳过; - 在
m 后加入当前节点u ; - 递归处理
u 的右子树,没有右儿子则跳过。
后序遍历
- 递归处理
u 的左子树,没有左儿子则跳过; - 递归处理
u 的右子树,没有右儿子则跳过; - 在
s 后加入当前节点u 。
具体方法
有了上面的铺垫我们就可以发明这一种方法了。
我们定义一棵树的亚硫酸序列
- 在
yls 后加入当前节点u ; - 递归处理
u 的左子树,没有左儿子则跳过; - 在
yls 后加入当前节点u ; - 递归处理
u 的右子树,没有右儿子则跳过; - 在
yls 后加入当前节点u 。
那么我们不难发现这个东西就是前序、中序和后序拼起来的。
所以我们可以从左到右扫描
不难证明一定可以这么操作。那么经过这么操作后留下的序列一定是
删除可以通过打标记实现,那么这样就可以做到
例子
上面的语言描述可能有些不清晰,我们使用一个例子来体会一下。
图中这棵树我们容易求得:
我们先在
再删去
那么剩下的
就是
能工智人使用说明
本文使用了 human_brain V14 进行写作与润色。