二叉排序树的应用(java)
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)的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java 7之集合类型 - 二叉排序树、平衡树、红黑树---转
http://blog.csdn.net/mazhimazh/article/details/19961017 为了理解 TreeMap 的底层实现,必须先介绍排序二叉树和平衡二叉树,然后继续介绍红黑 ...
- Java二叉排序树(转)
一.二叉排序树定义 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性 ...
- 【Java】 大话数据结构(11) 查找算法(2)(二叉排序树/二叉搜索树)
本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐 ...
- 二叉排序树的理解和实现(Java)
二叉排序树的定义和性质 二叉排序树又称二叉排序树.它或者是一个空树,或者是一个具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值 若它的右子树不空,则右子树上所有结点 ...
- 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】
[109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...
- Java实现二叉排序树的插入、查找、删除
import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)能够是一颗空树 * (2)若左子树不空,则左子树上全部的结点的值均小于她的根节点的值 * (3)若 ...
- 数据结构与算法—二叉排序树(java)
前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...
- Java数据结构(十三)—— 二叉排序树(BST)
二叉排序树(BST) 需求 给定数列{7,3,10,12,5,1,9},要求能够高效的完成对数据的查询和添加 思路三则 使用数组,缺点:插入和排序速度较慢 链式存储,添加较快,但查找速度慢 使用二叉排 ...
- PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历
Build A Binary Search Tree PAT-1099 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...
随机推荐
- 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 ...
- 1.4 使用电脑测试MC20的接收英文短信功能
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- 第二篇 Python图片处理模块PIL(pillow)
本篇包含:16.Point 17.Putalpha 18.Putdata 19.Putpalette 20.Putpixel 21.Quantize 22.R ...
- 协程(Coroutines)实现fibonacci函数
def fibonacci(): yield 1 yield 1 l=[1,1] while True: l=[l[-1],sum(l[-2:])] yield l[-1] def tribonacc ...
- 常用的机器学习&数据挖掘知识点
Basis(基础):MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE ...
- 键盘keyCode
字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 ...
- python的常用的内置函数
使用内置函数的好处:简单,快速. 1.zip():以多个序列为参数,返回元祖列表. 长度:在多个序列长度不一时,以最短的为准. 常见用途:构建多参数列表,构建字典. 2.map():在python2旧 ...
- Sublime text3装入插件Anaconda
好多人在学习编写代码的时候,会有不同的编辑器,大神们建议我使sublime,但是我在里面写代码,没有一点提示,我的天,不得烧坏我的脑子啊.学Python我用的Ananconda,但是这个spyder有 ...
- INSPIRED启示录 读书笔记 - 第11章 评估产品机会
市场需求文档 大多数的公司产品选择权是由高管.市场部门.开发团队甚至是大客户,在这种情况下公司会跳过市场需求文档或是误写成产品规范文档,回避评估产品机会 在正常情况下,应该是由业务人员会撰写一份论证产 ...
- StringTemplateLoader的用法
作为一个模板框架,freemarker的功能还是很强大的.在模板处理方面,freemarker有多种形式,最常见的方式是将模板文件放在一个统一的文件夹下面,如下形式:Configuration cfg ...