数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

%%%%%%

字符串模式匹配算法--详解KMP算法

https://blog.csdn.net/zc474235918/article/details/40474525

http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

%%%%%%

树的定义和基本术语

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

其实是一个递归的定义。每个有限集也是一个树。

 

树的抽象数据类型ADT

数据对象D:具有相同特征的数据元素的集合

数据关系R:

 

其他表示方法:

集合的圆圈方法、层次的目录

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

 

 二叉树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

左右之分。有序树。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

完全二叉树 节点数为10 的话,必须连续的1-10,中间不能断。

性质4中log为向下取整。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

顺序结构:对满二叉树比较好。 非完全二叉树,没有元素就为空。空间浪费。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

链域:就是地址

空链域就是没有孩子的地址。

n个节点有2n个链域。 有n-1个分支,每个分支就是一个地址,就是一个链域。2n-(n-1)=n+1个空链域。

 

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

遍历二叉树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

先序就是先根。

遍历都是递归的思想。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

上面:

函数指针作为函数参数传递https://www.cnblogs.com/jainszhang/p/10704514.html

 

二叉链表的存储形式

 

的数据结构实现中序遍历:

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

和下面先序只是访问元素的时机不同。其他都相同。VIsit函数位置不同。

先序是入栈的时候就访问根节点。 中序是出栈的时候才访问节点。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

线索二叉树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

二叉树为非线性结构 用一种方法 让它线性化

线性序列  按照某一种遍历的方法 排列成一个顺序。

 

n个节点,肯定有n-1个分叉,有n-1个节点有唯一双亲,1个根节点没有双亲。

有2n个链域,所以2n-(n-1)个空链域。所以有n+1个空链域。

 

 

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

a + b * - - - - e / f

线索化的目的是给空的链域 变为 非空。 可以通过中序、先序等方法来实现线索化。

 

 

层次遍历:

 数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

树和森林

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数组下标为双亲的位置。

 

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数组存放data和右边一个指针域,为一个单链表,下标指向孩子的位置

 

孩子双亲表示法:

左边为双亲位置,右边为孩子位置,感觉这个图和上面二叉树的图不对应。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

孩子兄弟表示法:

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

森林和二叉树的对应关系:

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

树和森林的遍历

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

下面一个例题很不错:

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

 

哈夫曼树以及其应用

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

注意:叶子节点是最外面的节点,度为0。

中间的叫分支节点。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

权值作为叶子节点构造哈夫曼树。

简单的说就是不断找当前最小权值的两个树。

 

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

n个叶子节点。剩下节点为n-1个。共有2n-1个节点。为严格二叉树。

数据结构——-字符串模式匹配、树、二叉树、森林、哈夫曼树

哈夫曼编码:左孩子为0,右边为1