【数据结构】树形结构:二叉树&树

来源:互联网 发布:淘宝哪家店是阿迪正品 编辑:程序博客网 时间:2024/05/21 04:43

深度(高度):层数

满二叉树:深度k上不能再添加叶结点

完全二叉树:深度k上,第k层只删除右边的叶结点

不完全二叉树:深度k上,第k层删除了左边的叶结点

排序二叉树:左根右的数值从小到大,且不重复

最优二叉树(哈夫曼树):结点的度不为1,带权(一般右子树带权)的路径长度最短。


二叉树的顺序存储:采用虚拟结点补全成完全二叉树,再从上到下、从左到右标识下标值,存入一块内存。(这种存储方式浪费空间)


二叉树常用两种链式存储结构:二叉链表、三叉链表(三叉链表中的结点比二叉链表多了一个指向双亲的指针域)。


二叉链表的递归遍历:

先序遍历:根左右

中序遍历:左根右

后序遍历:左右根


层序遍历:按层从上到下、从左到右

利用遍历可以实现许多运算,如求树的高度。


二叉链表的非递归遍历(栈):1、指针指向左孩子;2、取栈顶元素;3、出栈;4、指向右孩子【循环1-4,到指针或栈为空】




树有三种链式存储结构:1、孩子链表;2、孩子兄弟链表;3、双亲表


树转换为二叉树:1)保留第一个结点与父结点的链接,其他兄弟结点断开;2)兄弟结点连接。

森林转换为二叉树:1)每棵树转换为二叉树;2)转换成的二叉树的根节点看为兄弟结点连接。



构造哈夫曼树:1、结点按权排成一排;2、权值最小的合成新二叉树,其根结点的值为子结点权之和;3、将新结点与剩余结点比对,最小的合成……(以此类推,直至剩一棵树)

哈夫曼树来源于判定树,利用子结点权重不同,使权重小的被比较的次数最小,则权重大的离根结点越近。



0 0