二叉查找树(二叉排序树)

二叉查找树

二叉树的一个重要应用就是在查找中的使用。下面,先来看一个小例子:
给你一个数列(7,3,10,12,5,1,9),要求能够高效的完成对数据的查询和添加,对数据进行这样的处理的方式有很多,例如,数组和链表。

首先,来分析数组和链表的优点和缺点
1.数组:数组可以分为两种情况(是否进行了排序):
(1)未排序数组:数组查找速度慢,添加直接添加在数组尾部,比较快
(2)已排序数组:数组查找时可以使用二分查找,查找速度较快,但是插入数据时为了保证数组有序,在插入位置之后的数据均要进行位置移动,比较缓慢。

2.链表:无论链表中的数据是否有序,查询速度都很缓慢,插入相较于有序数组快。

在这里插入图片描述

上图描述的就是二叉查找树的基本概念,会发现,这种树集成了有序数组和链表的优点,所以在查找和添加数据的时候会很高效。接下来,我们先来创建一棵二叉查找树。

package com.ddw.binarysorttree;

public class BinarySortTreeDemo {
   
    public static void main(String[] args) {
   

        int[] arr = {
   7, 3, 10, 12, 5, 1, 9, 2};
        BinarySortTree binarySortTree = new BinarySortTree();
        //循环的添加节点到二叉排序树
        for (int i = 0; i < arr.length; i++) {
   
            binarySortTree.add(new Node(arr[i]));
        }

        //中序遍历二叉排序树
        System.out.println("中序遍历二叉排序树");
        binarySortTree.infixOrder();

        //测试一下删除叶子节点
        binarySortTree.delNode(7);
       /* binarySortTree.delNode(3);
        binarySortTree.delNode(10);
        binarySortTree.delNode(12);
        binarySortTree.delNode(5);
        binarySortTree.delNode(1);
        binarySortTree.delNode(9);
        binarySortTree.delNode(2);*/
        System.out.println("删除节点后");
        binarySortTree.infixOrder();
    }




}

//创建二叉排序树
class BinarySortTree {
   
    private Node root;


    //查找要删除的节点
    public Node search(int value) {
   
        if (root == null) {
   
            return null;
        } else {
   
            return root.search(value);
        }
    }


    //查找父节点
    public Node searchParent(int value) {
   
        if (root == null) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值