查找二叉树

1、查找二叉树概念


                      


  查找二叉树,又称二叉排序树(Binary Sort Tree)。一棵查找二叉树或者是一棵空树,或者满足以下递归条件:

  (1)查找树的左右子树各是一棵查找树;

  (2)若查找树的左子树非空,则其左子树上的各节点值均小于根节点的值;

  (3)若查找树的右子树非空,则其右子树上的各节点值均大于根节点的值。


2、查找二叉树的基本操作


  查找二叉树的基本操作有查找、插入节点和删除节点。对于下面一棵查找二叉树而言:


        


    查找:首先将关键字和根节点比较,如果小于则到根节点的左子树中查找,如果大于则进入右子树查找。


  ● 插入节点:在查找二叉树中插入一个节点需要分以下几种情况:

    (1)如果相同键值的节点已在查找二叉树,则不在插入;

    (2)如果查找二叉树为空树,则以新节点为查找二叉树;

    (3)将要插入节点的键值与插入后的父节点的键值比较,就能确定新节点是父节点的左子节点还是右子节点,并进行相应插入。


  ● 删除节点:删除节点也要分情况:

    (1)若待删除的节点p是叶子节点,则直接删除该节点;

    (2)若待删除的节点p只有一个子节点,则将这个子结点与待删除结点的父结点直接连接,然后删除节点p;

    (3)最复杂的就是有两个子节点的情况,可以考虑两种方法,都是同样的思想:用被删除节点A的左子树的最右节点或者A的右子树的最左节点作为替代A的节点,并修改相应的最左或最右节点的父节点的指针。


3、哈夫曼树(最优二叉树)


            


  首先来了解几个概念:


    ● 树的路径长度:树的根节点到每个节点的路径长度之和,完全二叉树的路径长度是最短的。

    ● 权:节点值就是权重,表示计算机访问该数据的频度。

    ● 带权路径长度:节点的权重x 路径长度。

    ● 树的带权路径长度:所有叶子节点的带全路径长度之和。

  哈夫曼树就是一种树的带权路径长度最小的树。

  如上图中的两棵树,右边树的带权路径长度为:8*1 + 4*2 + (1+2)*3 = 25

  左边数的带权路径长度为:1*1 + 2*2 + (4+8)*3 = 41


4、构造哈夫曼树


  假设有一组权值{ 5,29,7,8,14,23,3,11 },下面利用这组权值演示构造哈夫曼树的过程。

    第一步:以这8个权值作为根节点的权值构造具有8棵树的森林:


      


    第二步:从中选择两个根的权值最小的树作为左右子树构造一棵新树,并将这两棵树从森林中删除,并将新树添加进去:


            


    重复上面步骤,直到森林中只有一棵树为止,得到:


            


    这就是一棵哈夫曼树。可以看出,访问权值或者说频度比较低节点的都排在了最下面。


5、哈夫曼编码


             

  哈夫曼编码是在哈夫曼树的基础上,定义左边0,右边为1,如图,那么23的编码为:00  ,8的编码为011,这就是哈夫曼编码。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值