第三章(小结)

树--层次管理 使得操作起来效率更高
查找:静态查找(集合中的记录是固定的,没有插入和删除操作,只有查找)
          动态查找(集合中的记录是不固定的,除了查找,可能会发生插入和删除)

查找方法:1.顺序查找(可建立哨兵,不用判断下标是否越界)2.二分查找(条件:数据有序化)

二分查找时间复杂度分析 

因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:
一次二分剩下:n/2
两次二分剩下:n/2/2 = n/4
。。。
m次二分剩下:n/(2^m)
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为
 n/(2^m)=1;
2^m=n;
所以时间复杂度为:log2(n)

二分查找判定树:判定树上每个结点需要的查找次数刚好为该结点所在的层数。
查找成功时查找次数不会超过判定树的深度  

树的表示:儿子-兄弟表示法
二叉树是树研究领域里最重要的 也是最主要的内容
完全二叉树是很重要的二叉树
特殊二叉树:斜二叉树    满二叉树(完美二叉树)   完全二叉树
二叉树的遍历是树里面的主要操作。

完全二叉树可用数组来存储,父子或者兄弟关系可通过计算得出
一般二叉树也可以采用数组来存储,但会造成空间浪费。
一般二叉树常用二叉链表表示

二叉树的遍历方式:先序遍历,中序遍历,后序遍历。
先序,中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各节点
的时机不同。

遍历可用递归遍历非递归遍历

中序遍历非递归遍历算法
遇到一个结点,就把他压栈,并去遍历它的左子树
当左子树遍历结束后,从栈顶弹出这个结点并访问它
然后按其右指针再去中序遍历该结点的右子树

二叉树遍历的核心本质:如何使二维结构用线性一维表示出来

扫描二维码关注公众号,回复: 5330893 查看本文章

二叉树遍历总结:
当先序 中序 后序非递归实现时,需要用到栈,栈里装的数据是二叉树元素的地址 所以push进去的是地址,pop出来的也是地址
当层序遍历非递归实现时,需要用到队列,与上面相同,装的元素是地址,删除的也是地址。

当用链式存储结构来存储队列时,front指的是队列首元素的前一个元素,rear指的是队列的最后一个元素

栈可以用数组来模拟  不必建立结构体 使用一个top变量表示栈顶元素的下标即可

二叉树遍历的应用:
求二叉树的叶子结点(在输出结点前加个条件即可)
求树的高度(等于左右子树的高度加1)
二元运算表达式及其遍历(中缀表达式是不准的  受算符优先级的影响)


知道先序与中序序列可以唯一确定一个二叉树 
知道中序与后序也可以唯一确定...

给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。
树的同构 

结构数组表示二叉树:静态链表(具有链表的特性但是是用结构数组来表示)
 

猜你喜欢

转载自blog.csdn.net/a13683857889/article/details/86773908
今日推荐