树的介绍(很重要)

树型结构

元素之间存在一对多关系的数据结构,适合存储具有层次关系的数据模型,如:文件树、组织关系、族谱。

树的相关术语

根结点:树的最顶层结点,一棵树最多只有一个根结点。
双亲结点、父结点:结点的上一层结点,一个结点只有唯一一个双亲结点。
子结点:结点的下层结点,可以有若干个。
叶子节点:没有子结点的结点。
树的高度:树的层数
树的密度:树的结点数量

树的种类

(重要)二叉树:一个结点最多有两个孩子。
普通树:只有一个双亲结点,子结点的数量任意。
B树:多路平衡查找树,
多路:最多有M个子结点
平衡:所有子树的高度相差不超过1
查找:所有结点是有序的
B树和B+树了解即可,普通树一般成二叉树研究。

二叉树的种类

满二叉树

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树,每层的结点数量是:2 ^ (n-1),总结点数是:2 ^ n-1。

完全二叉树

除了最后一层外的所有层的结点数是:2 ^ (n-1)。
最后一层的结点按照从左到右的顺序排列。

有序二叉树

左子结点比双亲结点小,右子结点比双亲结点大,所有结点都遵循该规则。

线索二叉树

给普通二叉树结点,增加上线索,使用它能够以循环的方式遍历,提高遍历速度。

哈夫曼树

带权重的二叉树。

平衡二叉树

左右子树高度相差不超过1。

红黑树

接近平衡的二叉树,伪平衡二叉树。

大根堆

双亲结点比左右子结点都大。

小根堆

双亲结点比左右子结点都小。

二叉树的链式存储

每个结点(元素)由三部分组成:

左子树指针
右子树指针

优点:能很清晰的表示树的结构,对内存的要求低,节约内存。
缺点:只能逐级访问,递归遍历,可能产生内存碎片。

二叉树的顺序存储

注意:需要把普通二叉树补全为完全二叉树。
[] [#][] [#][#][][] [][][][][][][]
没有的地方用#号代替

前提:节点的下标从1开始排列
i/2 = 父节点下标
i2 = 左子节点下标
i
2+1 = 右子节点下标

优点:创建树方便,计算高度、密度速度快,使用的整块内存不易产生内存碎片。

缺点:对内存的要求高,当树比较稀疏时,对内存浪费极高,转换成完全二叉树时麻烦。

有序二叉树

左右子树与根结点的关系必须满足:左 < 根 <= 右

二叉树的遍历

        A
       / \
      B   C
     /   / \
    D   E   F
   / \   \
  G   H   J
     /
    I

ABCD#EFGH###J####I
前序:根 左 右
第一个元素为根结点
A B D G H I C E J F
A B D G # # H I # # # # C E # J # # F # #
后序:左 右 根
最后一元素为根结点
G I H D B J E F C A
中序:左 根 右
根结点左边的都是左子树,根结点右边的都是右子树。
G D I H B A E J C F
注意:所有子树都要遵循规则,要把每个结点当作一棵子树看待。
1、根据二叉树写出前、中、后遍历顺序。
2、根据 前序+中序 中序+后序 还原二叉树
G D I H B A E J C F 中
G I H D B J E F C A 后
1、根据后序确定根结点
2、根中序和根确定左右子树的数量
3、然后根据左右子树的数量确定,左右子树的后序
4、再使用同样的方法构建左右子树
G D I H B E J C F
G I H D B J E F C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值