树の讲解-----二叉树入门(遍历)

Posted Edolon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树の讲解-----二叉树入门(遍历)相关的知识,希望对你有一定的参考价值。

最近开课开的太玄学了,算法没学直接上树

基本概念

先来看下大佬的讲解......

树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列。在学习与总结的同时更加深入的了解掌握二叉树。本系列文章将着重介绍一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树。希望各位读者能够关注专题,并给出相应意见,通过系列的学习做到心中有“树”。

来源:简书

看不懂是不是

先来看一下一棵普通的树吧

然后我们把这树倒过来

再来想象一下,把所有的树枝当做一条“线”(或者是“边”),把每一片叶子当做一个“点”,再把所有的“点”链接起来,得到下图

这就是一棵数学意义上的“树”

数学意义上的“树”又分为 a lot,比如什么什么一般二叉树、完全二叉树、满二叉树、线索二叉树、霍夫曼树、二叉排序树、平衡二叉树、红黑树、B树 珂朵莉树 乱七八糟的一大堆,在这篇博客里我只介绍一下相对简单的一种树————二叉树

易发现,二叉树与普通树最大的不同就是一个节点最多直接连接到两个节点,(废话)

所以得出二叉树的特点

  • 1.每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
  • 2.左子树和右子树是有顺序的,次序不能任意颠倒。
  • 3.即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

然后 看不懂 性质

几种遍历方式

Part 1先序遍历:从根节点出发

如图,一棵正常的二叉树

先序遍历是三种 玄学 遍历方法中最简单的一种了,这里我教大家一种方便的先序遍历方法

我们从这整棵树的根节点出发,一直走左边,一直到达叶子节点为止,现在遍历顺序为ABDH

然后往回退,一直到找到第 一 个有右子树的节点,现在遍历顺序为ABDHI

然后重复上述操作,直到到达根节点,现在遍历顺序为ABDHIEJ(A)

然后我们遍历根节点的右子树,和遍历左子树时一样,现在遍历顺序为ABDHIEJCFG

然后我们就得出了这棵二叉树前序遍历答案ABDHIEJCFG

Part 2中序遍历:从???出发

不知道怎么表示所以用???代替

还是这棵树,不过中序遍历要求先遍历左子树,所以我们一路找到根节点的左子树的左子树的左子树......(省略若干个),一直找到叶子节点,然后递归,回到第一个有右子树的节点,用相同的方法遍历,现在顺序为HDIBJEA

D节点时,因为只有一个右孩子,所以直接输出即可,但是在B节点时,情况变复杂了,我们这样考虑

想象现在是一棵以B为根节点的二叉树(bushi),E为他的左孩子,J又是E的左孩子

Like this

然后对这一大根树进行中序遍历操作,顺序为JE(B)(因为B已经遍历过了),然后顺序为HDIBJEA

然后右子树也是一样的操作,就可以得出答案HDIBJEAFCG

Part 3后序遍历:从()*……%出发

个人认为最乱七八糟的一种

这种遍历就是先遍历左子树,再遍历右子树,最后来到根节点

具体方法也没法讲......

要领就是把每一个节点都当做是一棵二叉树的根节点,分别进行后序遍历(我也不知道我在说什么但这样就对了)

答案为HIDJEBFGCA

Ending

就先写到这吧,本Blog写的比较凌乱,欢迎指出错误。。。

以上是关于树の讲解-----二叉树入门(遍历)的主要内容,如果未能解决你的问题,请参考以下文章

线段树の一 区间和

二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例

Python教程讲解二叉树的三种深度

⭐算法入门⭐《二叉树》简单09 —— LeetCode 144. 二叉树的前序遍历

Python数据结构系列☀️《树与二叉树-基础知识》——知识点讲解+代码实现☀️

数据结构与算法:树 二叉树入门