- 📢博客主页:盾山狂热粉的博客_CSDN博客-C、C++语言,机器视觉领域博主
- 📢努力努力再努力嗷~~~✨
💡大纲
⭕存储管理的主要目的:解决多个用户共同使用主存的问题(怎么分配内存??)
👉主要包括分区存储管理、分页存储管理、分段存储器管理、段页式存储管理以及虚拟存储管理
一、树
(一)层次结构
(二)基本概念
父、子和兄弟节点:分别指上一层、下一层和同一层的相关节点
节点的度:节点所拥有的子树个数称为此节点的度
树的度:树的度以度最多的节点为准,度最多节点的度就是整棵树的度
叶子节点:指度为0的节点,也称为终端节点
内部节点:除根以外度不为0的分支节点(非终端节点)为内部节点
树的层次:根为第一层,根的孩子为第二层,以此类推
树的高度:是指一棵树的最大层次数,又称为深度
二、二叉树
(一)树和二叉树之间最主要的区别
👉二叉树中节点的子树要区分左子树和右子树,即使在节点只有一颗子树的情况下也要明确指出此子树是左子树还是右子树
👉二叉树中节点的最大度为2,而树中不限制节点的度数
(二)重要性质
(三)存储结构
1、顺序存储
📑对下面的二叉树进行顺序存储(用数组MEM表示),已知结点 A、B、C 在MEM中对应元素的 下标分别为 1、2、3,那么结点 D、E、F 对应的数组元素下标为(1)。
A.4、5、6 B.4、7、10
C.6、7、8 D.6、7、14
2、链式存储
(四)二叉树的遍历
💡从叶子节点开始判断
👉左:左子树
👉根:根节点
👉右:右子树
(五)反向构造二叉树
📑已知一棵树的前序遍历为ABHFDECG,中序遍历为HBEDFAGC,求此二叉树的后序遍历。
🗣️ 所以此二叉树的后序遍历为:HEDFBGCA
三、 排序二叉树(二叉查找树)
(一)定义
👉若它的左子树非空,则左子树上所有节点的值都小于根节点的值
👉若它的右子树非空,则右子树上所有节点的值都大于根节点的值
👉其左子树和右子树都满足以上两条性质,也都是二叉查找树
(二)节点的操作
💡从二叉查找树的定义可以得出,对二叉查找树进行中序遍历时,可以得到一个递增有序的序列
四、平衡二叉树
👉平衡二叉树是基于排序二叉树的一个概念
👉同一个序列所生成的排序二叉树可以有许多种形式,而不同的形式查找的效率是不一样的,所以需要对排序二叉树进行动态调平衡,找到查找效率较高的排序二叉树
(一)定义
👉任意节点的左右子树深度相差(平衡度)不超过1
👉每个节点的平衡度只能为-1、0或1
👉节点的平衡度:节点的左子树深度减右子树深度
(二)例题
📑例:对数列{1,5,7,9,8,39,73,88}构造排序二叉树,可以构造出多棵形式不同的排序二叉树。
五、哈夫曼树(最优二叉树)
(一)定义
👉用于哈夫曼编码
👉通过某种规则(权值)来构造出
👉只有叶子节点才是有效的数据节点,其他的非叶子节点是为了构造出哈夫曼树而引入的
(二)基本概念
树的路径长度:路径是树中一个节点到另一个节点之间的通路,此通路上分支数目称为树的路径长度。树的路径长度是从树根到每个叶子节点之间的路径长度之和
权:是指叶子节点上的数值,这个数值代表着某种字符出现的频度
节点的带权路径长度:节点的带权路路径长度为从此节点到根节点之间的路径长度与此节点权值的乘积
树的带权路径长度(树的代价):树中所有叶子节点的带权路径长度之和
💡最优二叉树是一类带权路径长度(WPL)最短的树
📑如下:具有4个相同节点的二叉树中,不同的构造方法,树的带权路径长度会有所不同,图(b)所示二叉树的带权路径长度最小
📑试题:假设某消息中只包含7个字符{a,b,c,d,e,f,g},这7个字符在消息中出现的次数分别为{5,24,8,17,34,4,13},利用哈夫曼树为该消息中的字符构造符合前缀编码要求的不等长编码,各字符的编码长度分别为(1),构造的哈夫曼树的带权路径长度为(2)。
(1)
A.a:4,b:2,c:3,d:3,e:2,f:4,g:3 B.a:6,b:2,c:5,d:3,e:1,f:6,g:4
C.a:3,b:3,c:3,d:3,e:3,f:2,g:3 D.a:2,b:6,c:3,d:5,e:6,f:1,g:4
(2)
A.279 B.266 C.276 D.269
六、线索二叉树
💡根据树的链式存储可以发现,许多节点的指针处于空闲状态,这些空指针也会占用存储空间,那能不能用他们做一些有价值的事呢?
1、线索二叉树的概念
👉利用节点空余指针来为二叉树的遍历提供方便是线索二叉树的主要思想
2、主要考点:给定一个线索二叉树和其遍历方法,要求补充缺失的线索
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!