【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历

正文之前

在实习的时候学习环境太差了,今天就结束生产实习啦!所以后面可以回去好好看书了!高兴,特地来发篇排过版的文~~~

正文

什么是树?

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第1张图片

查找算法:


【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第2张图片

静态查找 方法一:顺序查找


【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第3张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第4张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第5张图片

方法二:二分查找--二叉树的由来

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第6张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第7张图片

树的具体定义:


【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第8张图片

李逵?李鬼!非树也~

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第9张图片

基本术语,下面是我的解读:
节点的度:节点可以理解为人,这个人跟他老婆生孩子的度,怎么衡量呢?没错,就是儿子个数,用在树上也是可以这么说的!
树的度:看家族里面谁的儿子最多就代表家族的度咯!

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第10张图片

路径,没错,路径就是连线,至于多长,自己数~
评测一个家族的深度 是看这个家族谁的儿子最多吗?不是!是看这个家族传承多少代了~

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第11张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第12张图片

二叉树~


【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第13张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第14张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第15张图片

错题解读:
顺序查找:1只需要一次;
二分查找:
12/2 ----1
6/2 ----2
3/2----3

总共只需要四步!!!!不是五步!!!
其他3 需要五步, 6需要七步 2貌似二分查找找不到!

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第16张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第17张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第18张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第19张图片

N0表示没有儿子的节点,n2表示有两个儿子的节点,对于深度为3的二叉树,有n0 n1 n2三个节点分量,那么,我们可以考虑到,其节点总数可通过两种方式获取:

  1. 所有的节点数相加:n=n0+n1+n2

  2. 通过计算某一节点的子节点数相加来获得总节点数:
    a) 其中n0表示叶节点,所以没有子节点;
    b) N1表示有一个子节点,那么可以得到独生子的个数:n11;
    c) N2表示有两个子节点,那么可以的到同父子节点的个数:n2
    2;
    d) 根节点不属于任何人的儿子,所以还要加个根节点数:1;
    所以通过这种方式获得总结点数:n=n00+n11+n2*2+1;
    两者联立。没法求解,但是可以的得出一个关系式:

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第20张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第21张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第22张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第23张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第24张图片

前序遍历结果:

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第25张图片

中序遍历:

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第26张图片

后序遍历的观察方法很简单:先看一根主干,然后把叶子节点从左到右,一次拨开一层,然后输出就好了。

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第27张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第28张图片

访问路径其实都是一样的(每个节点都可以被碰到三次),但是输出本节点的数据的时间不同,第一次遇到就输出的是先序,第二次是中序,第三次是后序!!
第一次遇到是从父节点直接通过指针搜索过来被指向,然后它本身有一个指向左指针,一个指向右指针,从左指针上的节点(不论其存在与都会进行一次递归)回来访问它本身一次,从右指针上的节点(不论其存在与都会进行一次递归)回来访问它本身一次。合共三次!

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第29张图片

下面是我自己更加深刻的记忆方法:(儿子冲击法)

查找路径是一致的,一直往最左边跑。如果跑到头了。那么就是返回爸爸那里,从右边开始继续最左边跑的道路不动摇。如果爸爸只有一个自己这么一个独生子,那么就跑到爷爷那里。

儿子冲击法判定输出顺序:前序只要碰到了就直接输出,中序的话,要被儿子冲击一次,哪怕这个儿子并不存在你也要认为存在(淫荡点的你可以认为是你的半个儿子~嘿嘿嘿,那啥恩。你懂得,但是你孙子就不存在吧!)。所以如图所示,蓝色箭头代表儿子冲击的次数。中序遍历是儿砸冲击一次。后序是儿砸冲击两次。

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第30张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第31张图片

非递归就是迭代,执行效率会大大提升!利用指针不断地取下一个节点,直到指针指向空NULL 那么久就可以跳出循环,进入下一个判断条件进行输出~

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第32张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第33张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第34张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第35张图片

层序遍历比较好,用队列,有始有终,先进先出。具象化为:
一个人A去排队,然后顺手把自己的儿子B C放在自己身后,然后儿子B又招呼自己的儿子 D E来排队,C也招呼自己的儿子F来排队,这样,最后买到东西的次序就一直从爷爷排到了孙子。完全遵照年纪来排~~ 画个图吧 ~~

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第36张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第37张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第38张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第39张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第40张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第41张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第42张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第43张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第44张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第45张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第46张图片
【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第47张图片

正文之后

为了排这篇文#正文之前
在实习的时候学习环境太差了,今天就结束生产实习啦!所以后面可以回去好好看书了!高兴,特地来发篇排过版的文~~~

【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历_第48张图片
不开空调的大厅,这个剪刀手我是多无奈才摆出来?

你可能感兴趣的:(【我的漫漫考研路】数据结构第三章--树的概念和二叉树的遍历)