【数据结构-二叉搜索树的增删查改】

在这里插入图片描述

🌈个人主页努力学编程’
个人推荐基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解
学好数据结构,刷题刻不容缓点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

🌈二叉搜索树

二叉搜索树又称二叉排序树,从节点的个数上又可分为两种,空树或者具有一定性质的树,这种具有特殊性质的树具有特点:

  • 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  • 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  • 它的左右子树也分别为二叉搜索树

在这里插入图片描述

根节点27的左子树的所有的节点的值都小于27,右子树的所有节点的值都大于27,这也是为什么我们叫他二叉排序树的原因。当然他的每个子树也都满足这个性质。

⚡⚡⚡特别说明:当我们使用中序遍历搜索二叉树的时候,遍历所得的数组是一个有序数组。

🌈二叉搜索树-查找

如何在二叉搜索树中查找数值呢,他和普通二叉树有区别吗?

  • 当然我们在查找索索二叉树数值的时候,我们理应利用它结构上的特点进行查找:
  • 节点为空: 返回fasle;
  • 节点不为空:Key>root.val 在根节点的右侧进行查找
  • 节点不为空: Key<root.val 在根节点的左侧进行查找

在这里插入图片描述

🌈二叉搜索树-插入

在二叉搜索树当中,插入数据分为两步:找到要插入数据的位置,插入数据。

  • 如何找到插入数据的位置是最重要的一步,其实这步和查找有一定的相似度。我们将带插入数据与当前的根节点进行比较,根据大小关系,在树的左右子树进行查找。

  • 直到找到我们需要插入点的位置,但是只要你实际操作这个过程就会发现我们无法直接定位到需要插入数据的位置,只能定位到带插入位置的下个一位置,所以我们需要创建一个指针定位到插入数据指针的上一个位置,这样就找到了待插入的位置.

  • 若节点为空,直接插入节点!!!

在这里插入图片描述

  • 使用parent标记带插入的位置,直接进行插入:
    在这里插入图片描述

🌈二叉搜索树-删除

对于删除操作,比较麻烦,需要分不同的几种情况进行讨论,待删除的节点cur,待删除的数据的父节点parent:

  • cur.left == null:

  • cur 是 root: 则 root = cur.right

  • cur 不是 root,cur 是 parent.left: 则 parent.left = cur.right

  • cur 不是 root,cur 是 parent.right 则 parent.left = cur.left

  • cur.right==null:

  • cur是root: 则 则 root = cur.left

  • cur 不是 root,cur 是 parent.left,则 parent.left = cur.left

  • cur 不是 root,cur 是 parent.right,则 parent.right = cur.left

  • cur.left != null && cur.right != null:

  • 需要使用替换法进行删除,即在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被
    删除节点中,再来处理该结点的删除问题

🌈搜索二叉树-模拟实现:

针对于搜索二叉树的增删查改的基础操作代码的实现:

public class BinarySearchTree {
   
    static class TreeNode {
   
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int val) {
   
            this.val = val;
        }
    }

    public TreeNode root = null;

    public TreeNode search(int key) {
   <
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值