二叉排序树的应用(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 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...
随机推荐
- JDK版本更改,修改环境变量不生效解决办法
问题: 当使用安装版本JDK后,想要更改系统环境变量时,直接更改JAVA_HOME无效. 原因: 当使用安装版本的JDK程序时(一般是1.7版本以上),在安装结束后安装程序会自动将java.exe.j ...
- Docker基础入门实践
原文地址 基本概念 Docker三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 镜像 镜像可以理解为只读模板,如包含一个centos操作系统环境 容器 Do ...
- 剑指offer 面试3题
面试3题: 题:数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复 ...
- 使用TortoiseGit查看以前Commit的各个快照(snapshot)
Swith/Checkout提供了这个功能. 比如从bcbc66627334204f879eff99f68e70af0ca7907e回退到dc3f82f2532fcb95e4f24c9f9c331a7 ...
- CSS3 animation-iteration-count:infinite
原文:http://www.w3chtml.com/css3/properties/animation/animation-iteration-count.html animation-iterati ...
- springboot打war包
修改pom为war不是jar. 移除tomcar的jar依赖: <dependency> <groupId>org.springframework.boot</group ...
- 【Tech】CAS多机部署Server和Java Client端
昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/ ...
- Django---view视图FBV&CBV
一:创建项目和应用: 或者用命令创建: 1:django-admin.py startproject CBV&FBV 2: cd CBV&FBV (路径切到该文件夹下) 3: pyth ...
- hdu1010感想
杭电这道题是用dfs走迷宫问题,一直wa是因为没有将走过的地方标记,所以如果遇到走迷宫的问题一定要将走过的地方标记,如下: &&nx<n&&ny>=& ...
- kubernetes 核心对象
Pods Pod是Kubernetes的基本操作单元,也是应用运行的载体.整个Kubernetes系统都是围绕着Pod展开的,比如如何部署运行Pod.如何保证Pod的数量.如何访问Pod等.另外,Po ...