今天跟同学讨论到二叉树,便想到把这部分给整理一下。问题是这样的:
已知如图所示:
问如图所示中序遍历应该是什么?
答案是:debgfac
其实主要是记住该原则:前序根左右,中序左根右,后序左右根
具体怎么理解呢?百度百科是这么介绍的:
二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。
二叉树有三个特点:
- 每个节点最多只有两个子树。
- 左子树都为小于父节点的值,右子树都为大于父节点的值。
- 在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以上为我的公众号 专注于互联网岗位内推,欢迎关注
回复【机器学习资料】可领取上百G机器学习课程及数据资料
回复【大数据】可领取大数据相关资料
回复【推荐系统】可领取推荐算法相关资料
回复【python】可领取python相关学习资料
回复【NLP】可领取自然语言处理相关学习资料
回复【数据结构】可领取数据结构相关学习资料