二叉查找树-增删查和针对重复数据处理的 Java 实现


0. 前言

大家好,我是多选参数的程序锅,一个正在”研究“操作系统、学数据结构和算法以及 Java 的疯狂猛补生。本篇将带来的是二叉查找树的相关知识,知识提纲如图所示。

另外由于极客时间的《数据结构也算法之美》专栏的图太好看了,所以本篇很多地方直接使用了专栏的图片。

1. 基本介绍

二叉查找树又名二叉搜索树又或者叫做二叉排序树,是二叉树中最常用的一种类型。二叉查找树是为了实现快速查找而生的。除了支持动态数据集合的快速查找之外,还支持动态数据集合的快速插入或删除一个数据。

之所以可以快速插入、删除、查找一个数据,是因为二叉查找树的特殊结构。二叉查找树要求树中的任何一个节点,其左子树的每个节点的值都要小于这个节点的值,而右子树的每个节点的值都大于这个节点的值。如图所示。

2. 查找操作

先取根节点,如果根节点就等于我们要查找的数据,那就返回。如果要查找的数据比根节点要小,那么就在左子树中递归查找;如果要查找的数据比根节点的值大,那就在右子树中递归查找。

实现的代码如下所示:

public Node findNode(int data) {
    Node p = this.tree;

    while (p != null) {
        if (p.data == data) {
            return p;
        } else if (p.data < data) {
            p = p.right;
        } else {
            p = p.left;
        }
    }
    return null;
}

3. 插入操作

类似于查找操作,我们只需要从根节点开始,依次比较要插入的数据和节点的大小关系。这里先考虑插入数据跟已有数据不重复。如果插入的数据比节点的数据大,并且节点的右子树为空,那么直接插到右子节点的位置;如果不为空,则再递归遍历右子树,查找插入的位置。同理,如果要插入的数据比节点的数值小也是类似的。

实现的代码如下所示:

public void addNode(int data) {
    if (this.tree == null) {
        this.tree = new Node(data);
        return;
    }

    Node p = this.tree;

    while (p != null) {
        if (p.data < data) {
            if (p.right == null) {
     
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值