二叉排序树的应用(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 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...
随机推荐
- python的分布式爬虫框架
scrapy + celery: Scrapy原生不支持js渲染,需要单独下载[scrapy-splash](GitHub - scrapy-plugins/scrapy-splash: Scrapy ...
- 如何高效地分析Android_log中的问题?——查看Android源码
在日常解bugs时,需要通过log日志来分析问题,例如查看crash发生时的堆栈信息时,就会有Android的源码的调用,这是就要去查看Android源码. 1.进入Android源码网址查看,例如 ...
- 常用python模块
webbrowser浏览器控制模块 主要知道 导入 webbrowser使用webbrowser.open(url)运行就可以在默认浏览器打开指定url 来自为知笔记(Wiz)
- MySQL数据库(1)_MySQL数据库介绍与安装
一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展 ...
- iOS11 仿大标题 导航栏
iOS11 SytleTitleController 仿大标题 风格 导航栏 仿 iOS11 大导航标题 风格 UI 适用范围 iOS8 + 前言 iOS11全面应用大标题设计,(岂止于大—— 比逼 ...
- arm64的适配问题,这次真醉了
写过tableView的童鞋都知道,有必须的两个代理方法要实现,还有几个选择实现的. 必须实现的代理方法: ~设置行数 - (NSInteger)tableView:(UITableView *)ta ...
- OpenGL学习进程(5)第三课:视口与裁剪区域
本节是OpenGL学习的第三个课时,下面介绍如何运用显示窗体的视口和裁剪区域: (1)知识点引入: 1)问题现象: 当在窗体中绘制图形后,拉伸窗体图形形状会发生变化: #include ...
- $Eclipse+Tomcat搭建本地服务器并跑通HelloWorld程序
本文结构:(一)环境准备(二)在Eclipse里创建Dynamic Web工程(三)写一个简单的Servlet类并配置web.xml(四)运行程序 (一)环境准备 1.Eclipse:要使用for J ...
- R中的运算符,条件语句,控制语句
1.运算符 算术运算符:+,-,*,/ 关系运算符:==,!=,>,>=,<,<= 逻辑运算符:&,|,&&,||,! &和|称为短逻辑符,&a ...
- WebUploader API文档
Web Uploader内部类的详细说明,以下提及的功能类,都可以在WebUploader这个变量中访问到. As you know, Web Uploader的每个文件都是用过AMD规范中的defi ...