基本数据结构(二)——树

来源:互联网 发布:python math模块 编辑:程序博客网 时间:2024/06/05 17:43

3、树

        树是n个节点的有限集。

3.1 基本概念

       结点的度:结点有的子数个数

       树的度:结点度的最大值

       树的深度:树有几层

       满二叉树:所有节点都有左右子树,所有子树在同一层

                         非叶子节点度一定为2

      完全二叉树:将二叉树按从上到下、从左到右的顺序编号为1~n,若该编号与满二叉树编号相同,即为完全二叉树。

 

     

3.2 二叉树遍历:每个节点仅被访问一次(遍历的名称以根节点位置命名)

      前序遍历:根——左——右:1、2、4、8、9、5、10、3、6、7(按上图完全二叉树)

      中序遍历:————右

      后序遍历:————


3.3 哈弗曼树(WPL):带权路径最短的长度

      求解左右哈夫曼树及D结点哈弗曼编码:A(3)、B(6)、C(7)、D(2)、E(5)、F(1)

      (1)将给定结点按权值从小到大排列

      (2)权值最小的结点放在左树,次小的结点放在右树。根节点用N替代。

      (3)将新根节点和权值插入到原序列中,替代初始的两个子结点。

      (4)一次重复上述步骤。

      (5)哈弗曼编码:所有左子树权值用0代替,右子树权值用1 代替,按总上往下编码

     

     

3.4 二叉查找树(二叉搜索树、二叉排序树)

   (1)若左子树不空,左子树所有节点的值小于根节点的值

   (2)若右子树不空,右子树所有节点的值大于根节点的值

   (3)左右子树也分别为二叉查找树

3.5 平衡二叉树(AVL)

   (1)是一颗二叉排序树

   (2)左右子树高度相差最多为1

   (3)平衡因子BF:结点左子树深度减右子树深度(-1、0、1)

   (4)最小不平衡树:距离新插入结点最近的,平衡因子绝对值大于1的结点构成的子树

 

(5)插入新节点时,检查是否破坏了数的平衡性。若非平衡时,需要旋转达到新的平衡。平衡因子为正,则进行右旋(顺时针旋转);若平衡因子为负,则进行左旋(逆时针旋转)。


3.6 多路查找树(B树):需要操作的数据集非常大,降低访问次数

   (1)每棵树有多个节点或0个节点

   (2)属于平衡查找树

   (3)结点最大的孩子数称为B树的阶

   (4)根节点不是叶节点时,最少有2棵子树


3.7 B+树:适合带有范围的查找



注:以上部分内容来自《大话数据结构》

0 0
原创粉丝点击