第四章节 树(2)

目录

一、预备知识

二、二叉树

三、查找树ADT-----二叉查找树

四、AVL树

五、伸展树

六、树的遍历

七、B树

八、标准库中的集合与映射

五、伸展树

六、树的遍历

中序遍历:二叉查找树可以很方便的按顺序输出项。这种用于树的时候是中序遍历。

后序遍历:有时我们要先处理两个叶子节点再处理当前节点。如为了计算一个节点的高度,我们要先知道两个儿子的高度。

先序遍历:当前节点在儿子处理前处理。如想标记每一个节点的深度。

所有的有一个共同点:先处理null情况 ,再处理其它的。

七、B树

基于这样的现实:对磁盘的访问开销很大。所以要尽可能减少磁盘的访问。

由于典型的AVL树接近最优的高度,所以应该清楚,二叉树是不能使访问次数少于logN的。我们考虑M叉树。

原则上B树保证只有少数的磁盘访问。阶为M的B树有下面的性质:

1.数据项存储在树叶上。

2.非叶子节点 存储直到M-1个关键字以指示搜索方向。

3.树的根或者是一个树叶,或者其儿子数在2 - M之前 。

4.除根外,所有 非树叶节点 数在M/2 - M之前 。

5.所有的树叶都在相同 的深度并有L/2 - L之间个数据项.

八、标准库中的集合与映射

第三章节中的List容器,如ArrayList/ LinkedList用于查找时的效率很低,因此Collection API提供了两个附加的容器 Set /Map ,它们对插入,

删除,查找等基本操作效率比较高。

关于Set接口

关于Map接口

时间: 2024-10-13 02:32:22

第四章节 树(2)的相关文章

第四章节 树

一.预备知识  二.二叉树 三.查找树ADT-----二叉查找树 四.AVL树 五.伸展树 六.树的遍历 七.B树 八.标准库中的集合与映射

《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树

2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母.此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1.有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别.没有bad case是AVL树与普通的二叉搜索树的最大区别.为了实现平衡性质,我们需要记录每个节点的高度(或者平衡因子)来检测不平衡的情况.为了修正高度不平衡,需要用到“旋转”的方法,分为单旋转和双

机器学习算法的代码实现之第四章节:回归之梯度上升法

二种类别的点在平面上分布,我想找到一条直线,将平面划为两半边,每一边的点类别尽可能的统一,如何找到效果最佳的分界线,这就是最佳拟合问题,也叫作回归问题. 这次,代码很少.logRegres.py # coding:utf-8 from numpy import * #=============================================================================== # 数据集 #=============================

四棵树怎么种才能使任意两颗之间距离相等

1.从宏观来看,把这四颗树看成四个质点 第一种办法是把它们种在一起,这样两两之间距离都为0: 第二种办法是使它们形成一个三棱锥,比如可以在山顶种一棵树,在山脚分三个方位种三棵树:或者在坑底种一棵树,坑外面分别种三棵树. 2.从微观来看,这四颗树都是有形状的,那么重点就在于他们之间的“距离”怎么定义. 第一.如果这四颗树不是笔直(树干长歪了,考虑树冠.枝干和叶子)的话,那么需要根据它们具体的形状来给出具体的解决方案,有兴趣的同学可以由此开发一个仿生数学模型: 第二.如果这四颗树都是笔直的,那么它们

浅谈javascript继承【读javascript设计模式第四章节继承有感】

javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的 一:类似继承,先上关键代码 function extend(subClass,supClass){ var fn = function(){}; fn.prototype = supClass.prototype; subClass.prototype = new fn(); subClass.prototype.constr

士兵杀敌(四)(树状数组+线段树)

士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧. 假设起始时所有人的军功都是0. 输入

[算法系列之二十四]后缀树(Suffix Tree)

之前有篇文章([算法系列之二十]字典树(Trie))我们详细的介绍了字典树.有了这些基础我们就能更好的理解后缀树了. 一 引言 模式匹配问题 给定一个文本text[0-n-1], 和一个模式串 pattern[0-m-1],写一个函数 search(char pattern[], char text[]), 打印出pattern在text中出现的所有位置(n > m). 这个问题已经有两个经典的算法:KMP算法 ,有限自动机,前者是对模式串pattern做预处理,后者是对待查证文本text做预处

数据结构(四)树---二叉树实现

(一)顺序结构创建二叉树 #include <stdio.h> #include <stdlib.h> #include <math.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 //存储空间初始分配量 #define MAX_TREE_SIZE 100 //二叉树的最大结点数 typedef char TElemType; typedef int S

数据结构(四)树---树的转换

(一)树转二叉树 步骤 1.加线:在所有兄弟结点之间加一条连线 2.去线:对树中每个结点,只保留他与第一个长子结点的连线,删除他与其他孩子结点之间的连线 3.层次调整.以树的根节点为轴心,将整棵树顺时针旋转一定角度,使结构层次分明. 注意:第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子 转换后,根节点只有左子树,最左侧链表不改变 (二)森林转二叉树 步骤 1.将每个树转换为二叉树 2.第一棵二叉树不动,从第二棵二叉树开始,依次吧后一棵二叉树的根节点作为前一棵二叉树的根节点的右子