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

 

%%%%%%

字符串模式匹配算法--详解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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值