二叉树 中序遍历 python_二叉树中的前序中序后序遍历小记

今天跟同学讨论到二叉树,便想到把这部分给整理一下。问题是这样的:

已知如图所示:

fabd9d9893db091c137358e2ad786b6f.png
图像来自知乎网友

问如图所示中序遍历应该是什么?

925c8c46bac44c707dfe2c23de78665c.png
图片来自网络

答案是:debgfac

其实主要是记住该原则:前序根左右,中序左根右,后序左右根

具体怎么理解呢?百度百科是这么介绍的:

二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。

二叉树有三个特点:

  1. 每个节点最多只有两个子树。
  2. 左子树都为小于父节点的值,右子树都为大于父节点的值。
  3. 在n个节点中找到目标值,一般只需要log(n)次比较

那么具体怎么求呢?

首先,明确一点,无论是前序,中序,后序,遍历都是从左至右。然后我们需要将每个树看成独立的最小单元二叉树。比如 d,e、fg、bdf、abc。

既然这里求的是中序,那么中序的原则是 左根右原则。左是左子结点,根是根结点,右是右子结点。

我们可以得知a是整个二叉树的根结点,我们先延着左边遍历,a的左子结点为b,b的左子结点为d,d的左子结点为空.右子结点为e.那么d就是e的根结点,根据左根右原则 ,那么写写下空(省略不写),再写根结点d.右结点e.

即得出de;

同时d右是b的左子结点,即d根结点为b,右结点为fg这个整体(我们把fg当成一个整体二叉树),根据左根右的原则,那么下一个点即为根,因为左结点已经找到,根结点为b,右结点,我们继续看fg这个二叉树。fg这个二叉树,f是根结点,f为左子结点,所以b后面为g,即左结点,根结点f,右结点为空。

即 debgf,至此,a根结点,左子结点全部遍历完。

再看右边只,a为(bdcfg,c)的根结点,根据左中右原则,左边已经找到,根为a,右为c

所以最终中序为:debgfac 全部完成。

前序和后序也是一样的道理。

相关文献:

数据库的最简单实现 - 阮一峰的网络日志

二叉树_百度百科​baike.baidu.com
ffa3ce294b2b55470c246e5ae435e3e1.png

8c08e60f5b4494e4088b387f87391a12.png

以上为我的公众号 专注于互联网岗位内推,欢迎关注

回复【机器学习资料】可领取上百G机器学习课程及数据资料

回复【大数据】可领取大数据相关资料

回复【推荐系统】可领取推荐算法相关资料

回复【python】可领取python相关学习资料

回复【NLP】可领取自然语言处理相关学习资料

回复【数据结构】可领取数据结构相关学习资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值