二叉排序树代码实现(java版)(上)

简介: 二叉排序树代码实现(java版)

一、定义

1、一棵空树,或者是具有下列性质的二叉树:

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树

(4)没有键值相等的结点。

二、基础代码

1、先定义一个节点类,包括左节点、右节点、值三个实例变量。

public class Node {
    private Node leftNode;
    private Node rightNode;
    private int value;
    public Node(int value) {
        this.value = value;
    }
}

2、定义一个二叉排序树类,包括根节点。

public class BinarySortTree {
    private Node root;
}

3、开发测试类,用于测试。

(1)测试类中我们定义类一个arr数组,使用for循环生成节点添加到树中,该add()方法的下面会讲到。

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[]{7, 3, 10, 12, 5, 1, 9};
        BinarySortTree tree = new BinarySortTree();
        for (int i : arr) {
            tree.addNode(new Node(i));
        }
    }
}

三、插入节点

1、实现思路:

在二叉排序树中肯定需要一个add方法来添加节点,如果是一颗空树,我们直接将节点添加到根节点就行了,如果不是空树,我们肯定得递归调用节点的add方法了,因为根据二叉排序数的概念,左叶子节点的值<父节点的值<右节点的值,所以我们每次拿到当前节点,都需要判断当前节点与添加节点的值,看往左节点添加还是右节点添加,递归下去,只到找到要添加节点的位置为空时,递归停止,直接将节点添加。


2、代码如下:


(1)树类的add()方法

    public void addNode(Node node) {
        if (root == null) {
            root = node;
        } else {
            root.add(node);
        }
    }

(2)节点类的add()方法

   public void add(Node node) {
        if (node == null) {
            return;
        }
        if (this.value > node.value) {
            if (this.leftNode == null) {
                this.leftNode = node;
            } else {
                this.leftNode.add(node);
            }
        } else {
            if (this.rightNode == null) {
                this.rightNode = node;
            } else {
                this.rightNode.add(node);
            }
        }
    }

四、遍历排序二叉树


    上面我们实现了添加节点,接下来实现排序二叉树的遍历,根据定义和插入节点可知,要想得到一个有序的遍历,只有中序排序才能实现,因为中序遍历是按照左节点,然后父节点,最后右节点的顺序遍历,我们插入就是实现了左节点值<父节点值<右节点。如果使用前序或者后序遍历,出来的就无序了。


1、在树类中添加遍历方法


(1)遍历时,我们需要先判断根节点是否为空,如果为空,直接返回即可,不为空再调用节点类的排序方法。

    public void middleSort() {
        if (root == null) {
            return;
        }
        root.middleSort();
    }

2、在节点类中添加遍历方法

(1)先判断左节点是否有值,如果有,我们就让左节点接着调用遍历方法,只到左节点为空了,我们打印当前节点的值,当前节点就是父节点,然后再判断右节点,不为空就递归调用。

    public void middleSort() {
        if (this.leftNode != null) {
            this.leftNode.middleSort();
        }
        System.out.println(this.value);
        if (this.rightNode != null) {
            this.rightNode.middleSort();
        }
    }
目录
相关文章
|
2天前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
1天前
|
Java Kotlin
java调用kotlin代码编译报错“找不到符号”的问题
java调用kotlin代码编译报错“找不到符号”的问题
16 10
|
2天前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
12 1
|
2天前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
6 0
|
2天前
|
Java
Java的取余如何编写代码
【5月更文挑战第9天】Java的取余如何编写代码
19 5
|
2天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
2天前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
2天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
10 0
|
2天前
|
SQL 缓存 算法
优化你的Java代码:性能调优技巧
优化你的Java代码:性能调优技巧
15 0
|
2天前
|
Java 编译器 程序员
Java一分钟之第一行Java代码:输出"Hello, World!"
【5月更文挑战第7天】本文引导初学者编写运行第一个Java程序——打印&quot;Hello, World!&quot;,介绍基本代码结构及常见问题。包括语法错误(如缺少分号、缩进不规范)、编译运行问题(忘记编译、运行错误)和环境配置问题(JDK未安装、环境变量未设置)。建议检查语法、熟悉编译运行流程并正确安装配置JDK。通过实战演练,从编写到运行,迈出Java编程第一步。
20 0