package com.tree.find;

public class TestSearchBST {

    private static class BiNode{
int data;
BiNode lchild;
BiNode rchild; } public static boolean hasBuild = false;
public static void createBiTree(BiNode head, int array[]){
head.data = array[];
BiNode next;
for(int i=;i<array.length;i++){
hasBuild = false;
next = new BiNode();
next.data = array[i]; build(head,next);
}
} public static void build(BiNode t, BiNode next){
if(t != null){ if(t.data < next.data){
build(t.rchild, next);
if(!hasBuild){ // 设置一个标量,如果结点已经构建进树,之后就直接弹出,避免已经构建好的结点出现重复覆盖的现象
t.rchild = next;
hasBuild = true;
}
}else{
build(t.lchild,next);
if(!hasBuild){
t.lchild = next;
hasBuild = true;
}
}
} }
public static void forEach(BiNode t){
if(t != null){
//中序遍历,可以从小到大排好序
forEach(t.lchild);
System.out.println(t.data);
forEach(t.rchild);
} } //查找
static boolean isFind = false;
static BiNode findedNode = null;
public static void searchBSF(BiNode t, int key){
if(t == null){
return;
}else if(key == t.data){
findedNode = t; // 把找到的结点赋值给findedNode
isFind = true;
}else if(key < t.data){
searchBSF(t.lchild,key);
}else{
searchBSF(t.rchild,key);
}
} //插入
public static void insertBSF(BiNode t,int key){
searchBSF(t,key);
if(!isFind){//如果树中不存在这个数据,就插入
BiNode n = new BiNode();
n.data = key;
hasBuild = false; // 刚开始是没有构建入树的
build(t,n); } } public static void alert(BiNode t, int oldVal, int newVal){
searchBSF(t,oldVal);
if(isFind){
findedNode.data = newVal;
} }
public static void main(String[] args) {
BiNode t = new BiNode();
int arr[] = new int[]{,,,,,,,};
createBiTree(t,arr); //查找数据是否存在
// searchBSF(t,23);
// System.out.println(isFind); //插入新数据
// forEach(t);
// insertBSF(t,50);
// forEach(t); // forEach(t);
// delete(t, 12);
// System.out.println();
// forEach(t);
//searchBSF(t,23);
//System.out.println(findedNode.data);
//System.out.println(isFind); //修改操作
// forEach(t);
// alert(t, 23, 111);
// forEach(t);
}
}

二叉排序树的应用(java)的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java 7之集合类型 - 二叉排序树、平衡树、红黑树---转

    http://blog.csdn.net/mazhimazh/article/details/19961017 为了理解 TreeMap 的底层实现,必须先介绍排序二叉树和平衡二叉树,然后继续介绍红黑 ...

  3. Java二叉排序树(转)

    一.二叉排序树定义 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性 ...

  4. 【Java】 大话数据结构(11) 查找算法(2)(二叉排序树/二叉搜索树)

    本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐 ...

  5. 二叉排序树的理解和实现(Java)

    二叉排序树的定义和性质 二叉排序树又称二叉排序树.它或者是一个空树,或者是一个具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值 若它的右子树不空,则右子树上所有结点 ...

  6. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

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

    import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)能够是一颗空树 * (2)若左子树不空,则左子树上全部的结点的值均小于她的根节点的值 * (3)若 ...

  8. 数据结构与算法—二叉排序树(java)

    前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...

  9. Java数据结构(十三)—— 二叉排序树(BST)

    二叉排序树(BST) 需求 给定数列{7,3,10,12,5,1,9},要求能够高效的完成对数据的查询和添加 思路三则 使用数组,缺点:插入和排序速度较慢 链式存储,添加较快,但查找速度慢 使用二叉排 ...

  10. PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历

    Build A Binary Search Tree PAT-1099 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...

随机推荐

  1. when you are old

    When you are old william Butler Yeats When you are old and grey and full of sleep And nodding by the ...

  2. 1.4 使用电脑测试MC20的接收英文短信功能

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  3. 第二篇 Python图片处理模块PIL(pillow)

    本篇包含:16.Point    17.Putalpha    18.Putdata    19.Putpalette    20.Putpixel      21.Quantize     22.R ...

  4. 协程(Coroutines)实现fibonacci函数

    def fibonacci(): yield 1 yield 1 l=[1,1] while True: l=[l[-1],sum(l[-2:])] yield l[-1] def tribonacc ...

  5. 常用的机器学习&数据挖掘知识点

    Basis(基础):MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE ...

  6. 键盘keyCode

    字母和数字键的键码值(keyCode)   按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 ...

  7. python的常用的内置函数

    使用内置函数的好处:简单,快速. 1.zip():以多个序列为参数,返回元祖列表. 长度:在多个序列长度不一时,以最短的为准. 常见用途:构建多参数列表,构建字典. 2.map():在python2旧 ...

  8. Sublime text3装入插件Anaconda

    好多人在学习编写代码的时候,会有不同的编辑器,大神们建议我使sublime,但是我在里面写代码,没有一点提示,我的天,不得烧坏我的脑子啊.学Python我用的Ananconda,但是这个spyder有 ...

  9. INSPIRED启示录 读书笔记 - 第11章 评估产品机会

    市场需求文档 大多数的公司产品选择权是由高管.市场部门.开发团队甚至是大客户,在这种情况下公司会跳过市场需求文档或是误写成产品规范文档,回避评估产品机会 在正常情况下,应该是由业务人员会撰写一份论证产 ...

  10. StringTemplateLoader的用法

    作为一个模板框架,freemarker的功能还是很强大的.在模板处理方面,freemarker有多种形式,最常见的方式是将模板文件放在一个统一的文件夹下面,如下形式:Configuration cfg ...