查找二叉树、平衡二叉树

本文详细介绍了查找二叉树的构造规则,包括如何利用其高效查找,以及插入和删除结点的策略。同时,着重讲解了平衡二叉树的概念,强调了树的平衡对查询速度的重要性。
摘要由CSDN通过智能技术生成

查找二叉树

查找二叉树规定:

        左孩子(子树)小于根节点

        右孩子(子树)大于根节点

        子树中此规则仍然存在

下图中:

        左子树所有值均小于根节点90;右子树值大于根节点90;

                以49为根节点的左子树中,左子树的值20,小于左子树中的根节点49;

                以49为根节点的左子树中,右子树的值,56、51均大于左子树根节点49;

                以49为根节点的左子树中,以56为根节点的右子树中的左子树的值51小于根节点56

查找二叉树构造的意义

        查找二叉树又称排序二叉树,构造的意义是可以极大的提高查询的速率。

例如下图中:

        如果我想查找56

        顺序存储中需要定位到头部一步步往后查;

        查找二叉树中,首先比较56与根节点90的大小,小于89直接去以49为根的左子树。

        比较56与49的大小,大于49直接去以49为根节点的右子树。

        查到结果。

插入结点

①若该键值已存在,则不再插入,查找二叉树中不允许存在大小相等的值;

        例如:想要插入20,但是树中20已存在则不再插入。

②若查找二叉树为空树,则以新结点为查找二叉树;

        例如:查找二叉树中一个数值也没有,那么这个新插入的值就是二叉树。

③将需要插入的节点键值与父结点键值进行比较,如果大于父节点则插入右子树,小于父结点则插入左子树;

删除结点

①若删除结点为叶子结点,则直接删除;

        例如:结点51为叶子结点,想要删除直接删除就可。

 ②若删除的结点只有一个子节点,则直接将这个子节点与删除结点的父节点连接;

        例如:删除结点56,56只有一个子节点51,56的父节点是49,如果删除56,则需要将结点49与结点51连接。

③若删除的结点有两个子节点,则在其左子树上用中序遍历寻找最大的值,用最大的值代替删除节点,然后将最大的值原本所在的位置删除,再根据①、②中的规则处理最大值的子节点。

        例如:删除树中的90,首先在其左子树即以49为根节点的子树之中寻找最大值,最大值为56,用56代替90,然后将56的子节点51按照上述①、②中的规则处理,即将节点51连接到节点49上。

平衡二叉树

        同样的数字序列,所构成的排序二叉树可能有多种不同情况,但是往往二叉树的构造越平衡,查找速度越快,因此提出平衡二叉树的概念。

例:

        数字序列:1、5、7、8、9、39、73、88可构造而成多种不同的二叉树。右侧二叉树的构造比左侧二叉树的构造更平衡,因此右侧二叉树的查找速度要快于左侧。

 平衡二叉树的定义

        判断一棵二叉树是不是平衡二叉树下面①②条件缺一不可。

①任意节点的左右子树深度相差不超过1。

        下图中二叉树的左子树深度为5,没有右子树即右子树深度为0,其左右子树的深度差值为5,超过1,所以不是平衡二叉树。

        下图中二叉树的左子树深度为3,右子树深度为 2,左右子树的深度差值为1符合平衡二叉树标准故为平衡二叉树。

 

②二叉树的每个节点的平衡度只能是-1、0、1。

每个结点的平衡度是该结点的左子树深度减去该结点的右子树深度。

        下图中不满足每个结点的平衡度只为-1、0、1,故不是平衡二叉树。

        下图中满足每个结点的平衡度只为-1、0、1,故是平衡二叉树。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值