美文网首页
树结构入门教程-二叉排序树

树结构入门教程-二叉排序树

作者: 会上树的程序猿 | 来源:发表于2020-03-28 13:18 被阅读0次

前面我们学习了赫夫曼相关的实际操作,本节我们再来学习另外一种树的结构算法--->二叉排序树,那么首先我们来介绍下什么是二叉排序树

二叉排序树的介绍

二叉排序树简称BST(BinarySortTree),对于二叉排序树的任何一个非叶子节点,都有这样的要求:左子节点的值比当前节点的值要小,右子节点的值比当前节点的值要大,这里还有一种特殊的情况:

如果值都是相同的,我们可以将节点放在左子节点或者是右子节点,当然一般会尽量避免出现相同的.我们来看一个案例如下图的二叉排序树{7,3,10,12,5,1,9}当我们要插入2是过程如下图所示:

image.png

上述就是二叉树排序树的示意图,了解完什么是二叉排序树我们通过具体的案例然后用代码来实现一棵二叉排序树的创建过程

案例分析

假设我们有这样一组数列{7,3,10,12,5,1,9},需要我们完成二叉排序树的创建和打印操作

代码实现

首先我们需要一个Node,这个我们还是直接用之前创建的即可,代码如下:

''''
//创建节点
class Node{
int value;
Node left;
Node right;

public Node(int value) {
    this.value = value;
}

@Override
public String toString() {
    return "Node{" +
            "value=" + value +
            '}';
}
//节点的添加方法
//采用递归的方式来添加,需要满足二叉排序树的要求
public void add(Node node){
    if (node == null){
         return;
    }
    //判断当前传入节点的值和当前子树的根节点的值的关系
    if (node.value < this.value){
        //如果当前节点的左子节点为null,我们直接添加
        if (this.left == null){
            this.left = node;
        }else { //递归去添加
            this.left.add(node);
        }
    }else { //表示 node.value > this.value
        if (this.right ==null){
            this.right = node;
        }else {
            this.right.add(node);
        }
    }
}
//中序遍历
public void midOrder(){
    if (this.left !=null){
        this.left.midOrder();
    }
    //输出当前节点
    System.out.println(this);
    if (this.right !=null){
        this.right.midOrder();
    }
}

上述Node中最重要的方法是add方法,也是我们动态构建二叉排序树的核心方法,之前我们构建树都是手动去添加节点,这里是递归去添加的,再来看我们的创建二叉排序树的代码:

//创建二叉排序树
class BinarySortTree{
private Node root;
//添加方法
public  void add(Node node){
    if (root ==null){//表示空树
       root = node;
    }else {
        root.add(node);
    }
}
//中序遍历
public void midOrder(){
    if (root != null){
        root.midOrder();
    }else {
        System.out.println("二叉排序树为null,无法遍历!");
    }
}

我们可以看到的是这里还是调用Node中的add方法,接着我们来测试一把,测试代码如下:

/**
 * 树结构学习-二叉排序树
 */
public class BinarySortTreeCase {
public static void main(String[] args) {
    int[] arr = {7,3,10,12,5,1,9};
    BinarySortTree binarySortTree = new BinarySortTree();
    //循环添加节点
    for (int i = 0; i <arr.length ; i++) {
        binarySortTree.add(new Node(arr[i]));
    }
    //中序遍历二叉排序树
    System.out.println("中序遍历二叉排序树!");
    binarySortTree.midOrder();

来看测试结果如下图所示:

二叉排序树创建测试结果.png

上图测试结果是我们通过中序遍历得到的结果,最后发现是没有问题的,那么关于二叉树的创建和遍历我们就到这了,下篇我们来学习它的删除节点的操作过程,完整代码在Git上可下载:

相关文章

  • 树结构入门教程-二叉排序树

    前面我们学习了赫夫曼相关的实际操作,本节我们再来学习另外一种树的结构算法--->二叉排序树,那么首先我们来介绍下什...

  • 数据结构学习第四弹 二叉排序树

    二叉排序树又称为二叉搜索树或二叉查找树,这是一种插入、删除和检索记录效率都很高的树结构 二叉排序树概念 二叉排序树...

  • 树结构入门教程-平衡二叉树

    我们通过前两节的学习完成对二叉排序树的基本操作,其中需要注意是二叉排序树的删除节点哪三种场景,本篇我们来学习树结构...

  • 树结构入门教程-二叉排序树的删除节点操作

    上节我们学习了二叉排序树的创建和遍历操作,这节在上节的基础上我们来学习二叉排序树的删除节点操作,这里的删除操作又分...

  • 看图说话之二叉排序树

    一丶二叉排序树基本介绍 二叉树是一种常见的树结构,二叉排序树是二叉树的一种特殊情况,其在二叉树的基础上施加了一种“...

  • 树结构入门教程-堆排序

    我们之前在学习常见的算法时,说过关于堆排序的学习在有了一定对树了解的基础上讲解,因为堆排序是利用了树的一些特性,所...

  • 树结构入门教程-赫夫曼编码

    前面我们学习了赫夫曼树的创建的过程,关于创建的详细过程可以看看上节的原理分析和代码实现,这节我们在它的基础上来学习...

  • 二叉树、BST(二叉搜索树)、AVL(平衡二叉树)、红黑树、B树

    1、二叉树 每个结点最多只有两个子树的树结构 2、BST(二叉搜索树或二叉排序树) 左子树上所有结点的值均小于它的...

  • 二叉树

    二叉树是每个结点最多有两个子树的树结构。二叉查找树和二叉排序树是一样的。 二叉查找树或者是一棵空树,或者具有下列性...

  • 树结构入门教程-赫夫曼解码

    上节我们学习赫夫曼编码的过程,这节我们来学习赫夫曼编码的逆操作---------->解码操作,由于我们对编码的过程...

网友评论

      本文标题:树结构入门教程-二叉排序树

      本文链接:https://www.haomeiwen.com/subject/clcjuhtx.html