数据结构之树

数据结构之树

根据实现方式,数据结构可以分为两种类型:基于数组的实现与基于链表的实现。它们都是线性结构。而树是半线性结构。树是由节点和弧组成。形状和现实生活的树不同,是倒立的。节点的层次是从根节点到该节点的路径,或者说层次是该路径上的节点数量。层次其实就是深度。非空树的高度是树中节点的最大层次(深度),即。空树是高度为-1的合法树、单一节点是高度为0 的树(这个定义是根据清华大学邓俊辉版)。
简单理解:高度从底向上,深度则相反。
树的深度是从根节点开始(其深度为0)自顶向下逐层累加的;
树的高度是从叶节点开始(其高度为0)自底向上逐层累加的。
这里写图片描述
上图中节点v的孩子总数称作其度数或度。(孩子是节点的下一层)

二叉树

二叉树中的每个节点的度数不超过2。不含一度节点的二叉树称为真二叉树
在二叉树中,同一父亲节点的孩子都可以左,右相互区分,就称作有序二叉树。也称二叉搜索树,特性是:
左子树中的值小于或等于其父节点v中的值,右子树中的值大于或等于其父节点v的值。
任何一颗二叉树是二叉搜索树,当且仅当其中序遍历序列单调非降

平衡树:如果树中任一节点的两个子树(左子树和右子树)的高度差是0或者是1,该二叉树是高度平衡的。简称平衡树。

满二叉树
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

哈夫曼树
哈弗曼树是最优二叉树的一种。
先说最优二叉树。
设某二叉树有n个带权值的叶子结点,则该二叉树的带权路径长度记为:
这里写图片描述
公式中,Wk为第k个叶子结点的权值;Lk为该结点的深度。
其中带权路径长度最小的二叉树就称为最优二叉树
构造哈弗曼树的方法
这里写图片描述
举例
这里写图片描述
由huffman树构造huffman编码
(1)利用字符集中每个字符的使用频率作为权值构造一个哈夫曼树;
(2)从根结点开始,为到每个叶子结点路径上的左分支赋予0,右分支赋予1,并从根到叶子方向形成该叶子结点的编码
这里写图片描述
完全二叉树
除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。
这里写图片描述

平衡二叉查找树
平衡二叉查找树是对二叉查找树的改进。因为二叉查找树最差时间复杂度为O(n),最好时间复杂度是O(logn)
平衡二叉查找树又称为平衡二叉排序树,又称为AVL树,是二叉查找树的改进。
定义(满足如下三个条件):
(1),是二叉查找树。
(2),左子树与右子树的深度之差的绝对值小于或等于1.
(3),左右子树也是平衡二叉查找树。
平衡二叉查找树的其他形式是伸展树,B-树,红黑树,kd-树

数据结构应能支持插入操作,并能方便地从中取出具有最大或最小关键码的记录,这样的数据结构即为优先级队列(priority queue)。从外表看来,优先级队列颇似队列和栈,但要构建高效率的优先级队列,需要比实现队列和栈考虑更多的因素。在优先级队列的各种实现中,堆(heap)是最高效的一种数据结构。堆是完全二叉树或近似完全二叉树。
完全二叉堆
完全二叉堆满足两个性质:
1,逻辑结构等同于完全二叉树即所谓的“结构性”
2,就优先级而言,堆顶以外的每个节点都不大于其父节点
小顶堆:
堆顶以外的每个节点都不小于其父节点
大顶堆:
堆顶以外的每个节点都不大于其父节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值