二叉树的重建!!!

二叉树的重建 :

问题描述 :


给你一个二叉树前序遍历和中序遍历输出后序遍历。


问题描述的非常的清楚,所有在这里我就开始复习复习一下,

前序遍历 中序遍历 后序遍历


其实这三种遍历的方式,不过就是根节点的访问顺序不一样而已,没有想象的那么难以理解


首先是前序遍历 :

根节点  +  左节点  +  右节点

拿到一个二叉树先访问他的根节点 在访问他的左节点 在访问他的右节点

这就是一个二叉树的形式 根据刚在将过的前序遍历,我开始分析 这个过程

首先访问 A 发现 A 是 根结点所以要把他记录下来

根节点 后面的顺序是 左节点 所以要访问B,但是现在不记录

又发见B也是一个相对的根节点 ,现在记录下来。

在访问B中的左节点 D,发现D只是一个子节点不是根节点,所以直接把D记录下来。

之后访问B中的右节点 E,发现E只是一个子节点不是根节点,所以直接把E 记录下来。

所有的A的左节点都遍历结束了,开始遍历A的右节点

访问C ,C是根节点,C 中有节点,记录C节点。

访问C中的F节点,F节点为左节点,记录F节点

最后的记录是

ABDECF


中序遍历 :

中序遍历的顺序 :

左节点 + 根节点 + 右节点

优先级 :

左节点 > 根节点 > 右节点

解释 : 如果存在左节点,就一定把所有的左节点全部都遍历结束,全部遍历完左节点后,在查找根节点

根节点遍历结束后,在遍历右节点

首先访问 A ,但是A 是根节点,A中存在左节点B,所以就要从访问的A中移动到节点B,只是访问不记录

进入B后,发现B中存在左节点D,就从B节点移动到D,只是访问不记录。

进入D后,发现他只是B的一个左节点,D自身没有节点了,所以直接记录D,不再继续访问,

在B这个小二叉树中已经遍历玩了所有的左节点,直接遍历B这个根节点,记录B,访问B的右节点,记录E

A这个二叉树的左节点全部遍历结束了,遍历根节点A,记录A,访问A的右节点C

发现C是有子节点的,所以从C移动到F,进入F后发现F没有节点,直接记录F,最后记录C


最后的结果是 :

DBEAFC


后续遍历

遍历的顺序是 :

左节点 + 右节点 + 根节点

也就是说他的遍历优先级 是 :

左节点 > 右节点 > 根节点

遍历过程 :

访问A,之后发现A有左节点B,直接访问B,发现B有节点,访问D,发现D没有节点,记录D,之后访问E,发现

E没有节点,记录E,最后记录B,A的左节点遍历结束,访问C,发现C中有节点,访问F,发现F没有节点,直接记录

F,C中没有右节点,所以直接记录跟节点C,A的左节点和右节点都访问结束了,所以最后记录根节点A

遍历的所有顺序就是:

DEBFCA



总结一下 :

前序遍历结果 :ABDECF

中序遍历结果 :DBEAFC

后序遍历结果 :DEBFCA


现在要通过前序遍历和中序遍历推出后序遍历

或者是后序遍历和中序遍历推出前序遍历


前序 + 中序 -> 后序

后序 + 中序 -> 前序


这代表无论这样推出,中序遍历是一定要存在的,这就代表在这个程序中,中序遍历占有了一定的重要地位。



例如 :

前序 : DBACEGF

中序:ABCDEFG

后序:ACBFGED
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值