B树插入与查找

B树: 二叉查找树,所有左节点都比父节点要小,所有右节点都比父节点要大。查找,插入的时间复杂度为O(logn)

public class BTreeTest {
    public static  int[] arrays = {1,7,5,12,8,4};
    private  static Node header;
    public static void main(String[] args){
        buildBTree(); //构建B树
        middleTravers(header); //中序遍历
        System.out.println(search(1,header));
        System.out.println(search(10,header));
    }

    private static  void buildBTree(){
        for(Integer i : arrays){
            if(null == header) {
                header = new Node(i);
            }else{
                insert(header,i);
            }
        }
    }

    private static void insert(Node n,int i){
        int value = n.value;
        if(value >= i){
            if(null == n.leftChildNode){
                n.leftChildNode = new Node(i);
            }else{
                insert(n.leftChildNode,i);
            }
        }else{
            if(null == n.rightChildNode){
                n.rightChildNode = new Node(i);
            }else{
                insert(n.rightChildNode,i);
            }
        }
    }

    private static boolean search(int i,Node node){
        if(null == node) return false;
        if(node.value > i){
            return search(i, node.leftChildNode);
        }else if(node.value < i){
            return search(i, node.rightChildNode);
        }
        return true;
    }

    private static void middleTravers(Node node){
        if(null == node) return;
        middleTravers(node.leftChildNode);
        System.out.print(node.value);
        middleTravers(node.rightChildNode);
    }

    private static class Node{
        public int value;
        public Node leftChildNode; //左节点
        public Node rightChildNode;//右节点

        public Node(int i){
            value = i;
        }
    }
}
时间: 2025-01-02 05:11:59

B树插入与查找的相关文章

萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)

萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配置文件中的.甚至,还想尝试类似自动补全的功能.当然了,是做一个比较low的补全,比如传入"编程",能够得到"软件"."学习"."学习网站"."入门"四个字符串.但是传入"编"不会得到&quo

跳跃表,字典树(单词查找树,Trie树),后缀树,KMP算法,AC 自动机相关算法原理详细汇总

第一部分:跳跃表 本文将总结一种数据结构:跳跃表.前半部分跳跃表性质和操作的介绍直接摘自<让算法的效率跳起来--浅谈"跳跃表"的相关操作及其应用>上海市华东师范大学第二附属中学 魏冉.之后将附上跳跃表的源代码,以及本人对其的了解.难免有错误之处,希望指正,共同进步.谢谢. 跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找.插入.删除等操作时的期望时间复杂度均为O(logn),有着近乎替代平衡树的本领.而且最重要的一点,就是它的编程复杂度较同类

顺序表 初始化 插入 删除 查找 合并 交换 判断为空 求长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(SqList) #define MLC (Li

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

AVL树插入和删除

一.AVL树简介 AVL树是一种平衡的二叉查找树. 平衡二叉树(AVL 树)是一棵空树,或者是具有下列性质的二叉排序树:    1它的左子树和右子树都是平衡二叉树,    2且左子树和右子树高度之差的绝对值不超过 1. 定义平衡因子(BF)为该结点左子树的高度减去右子树的高度所得的高度差:AVL 树任一结点平衡因子只能取-1,0,1: 二.AVL树插入 插入:先查找被插入元素,如果存在,则不操作:如果不存在,则插入. 插入后就是调整和选择的问题. 我们先看一下我们会面临怎么样的问题: 离插入点最

Java实现二叉排序树的插入、查找、删除

import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)可以是一颗空树 * (2)若左子树不空,则左子树上所有的结点的值均小于她的根节点的值 * (3)若右子树不空,则右子树上所有的结点的值均大于她的根节点的值 * (4)左.右子树也分别为二叉排序树 * * * 性能分析: * 查找性能: * 含有n个结点的二叉排序树的平均查找长度和树的形态有关, * (最坏情况)当先后插入的关键字有序时,构成的二叉排序树蜕变为单枝树.查找性能为O(n) * (最好

Trie树&mdash;字典树(单词查找树)

Trie树,又称字典树,单词查找树.它来源于retrieval(检索)中取中间四个字符构成的.用于存储大量的字符串以便支持快速模式匹配.主要应用在信息检索领域. Trie有三种结构:标准Trie(standard trie),压缩Trie,后缀Trie(suffix trie). 1.标准Trie 标准Trie树的结构:所有含有公共前缀的字符串将挂在树中同一个结点下.实际上trie简明的存储于串集合汇总的所有公共前缀.加入有这样一个字符串集合X{bear,bell,bid,bull,buy,se

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

B-树的插入、查找、删除

转自:http://blog.163.com/zhoumhan_0351/blog/static/39954227200910231032917/ 前面讨论的查找都是内查询算法,被查询的数据都在内存.当查询的数据放在外存,用平衡二叉树作磁盘文件的索引组织时,若以结点为内外存交换的单位,则找到需要的关键字之前,平均要进行lgn次磁盘读操作,而磁盘.光盘的读写时间要比随机存取的内存代价大得多.其二,外存的存取是以“页”为单位的,一页的大小通常是1024字节或2048字节. 针对上述特点,1972年R