正文之前
在实习的时候学习环境太差了,今天就结束生产实习啦!所以后面可以回去好好看书了!高兴,特地来发篇排过版的文~~~
正文
什么是树?
查找算法:
静态查找 方法一:顺序查找
方法二:二分查找--二叉树的由来
树的具体定义:
李逵?李鬼!非树也~
基本术语,下面是我的解读:
节点的度:节点可以理解为人,这个人跟他老婆生孩子的度,怎么衡量呢?没错,就是儿子个数,用在树上也是可以这么说的!
树的度:看家族里面谁的儿子最多就代表家族的度咯!
路径,没错,路径就是连线,至于多长,自己数~
评测一个家族的深度是看这个家族谁的儿子最多吗?不是!是看这个家族传承多少代了~
二叉树~
错题解读:
顺序查找:1只需要一次;
二分查找:
12/2 ----1
6/2 ----2
3/2----3
总共只需要四步!!!!不是五步!!!
其他3 需要五步, 6需要七步 2貌似二分查找找不到!
N0表示没有儿子的节点,n2表示有两个儿子的节点,对于深度为3的二叉树,有n0 n1 n2三个节点分量,那么,我们可以考虑到,其节点总数可通过两种方式获取:
所有的节点数相加:n=n0+n1+n2
-
通过计算某一节点的子节点数相加来获得总节点数:
a) 其中n0表示叶节点,所以没有子节点;
b) N1表示有一个子节点,那么可以得到独生子的个数:n11;
c) N2表示有两个子节点,那么可以的到同父子节点的个数:n22;
d) 根节点不属于任何人的儿子,所以还要加个根节点数:1;
所以通过这种方式获得总结点数:n=n00+n11+n2*2+1;
两者联立。没法求解,但是可以的得出一个关系式:
前序遍历结果:
中序遍历:
后序遍历的观察方法很简单:先看一根主干,然后把叶子节点从左到右,一次拨开一层,然后输出就好了。
访问路径其实都是一样的(每个节点都可以被碰到三次),但是输出本节点的数据的时间不同,第一次遇到就输出的是先序,第二次是中序,第三次是后序!!
第一次遇到是从父节点直接通过指针搜索过来被指向,然后它本身有一个指向左指针,一个指向右指针,从左指针上的节点(不论其存在与都会进行一次递归)回来访问它本身一次,从右指针上的节点(不论其存在与都会进行一次递归)回来访问它本身一次。合共三次!
下面是我自己更加深刻的记忆方法:(儿子冲击法)
查找路径是一致的,一直往最左边跑。如果跑到头了。那么就是返回爸爸那里,从右边开始继续最左边跑的道路不动摇。如果爸爸只有一个自己这么一个独生子,那么就跑到爷爷那里。
儿子冲击法判定输出顺序:前序只要碰到了就直接输出,中序的话,要被儿子冲击一次,哪怕这个儿子并不存在你也要认为存在(淫荡点的你可以认为是你的半个儿子~嘿嘿嘿,那啥恩。你懂得,但是你孙子就不存在吧!)。所以如图所示,蓝色箭头代表儿子冲击的次数。中序遍历是儿砸冲击一次。后序是儿砸冲击两次。
非递归就是迭代,执行效率会大大提升!利用指针不断地取下一个节点,直到指针指向空NULL 那么久就可以跳出循环,进入下一个判断条件进行输出~
层序遍历比较好,用队列,有始有终,先进先出。具象化为:
一个人A去排队,然后顺手把自己的儿子B C放在自己身后,然后儿子B又招呼自己的儿子 D E来排队,C也招呼自己的儿子F来排队,这样,最后买到东西的次序就一直从爷爷排到了孙子。完全遵照年纪来排~~ 画个图吧 ~~
正文之后
为了排这篇文#正文之前
在实习的时候学习环境太差了,今天就结束生产实习啦!所以后面可以回去好好看书了!高兴,特地来发篇排过版的文~~~