java中级——集合框架【2】-二叉树
二叉树
二叉树概念
首先我们要明确,二叉树由各种节点组成;还有就是二叉树特点:(1)每个节点都可以有左子节点,右子节点(2)每一个节点都有一个值
如图所示:
代码所示:
package cn.jse.node;
public class Node {
//左右节点、值
public Node leftNode;
public Node rightNode;
public Object value;
}
二叉树排序:插入数据与遍历
例子:
package cn.jse.node;
import java.util.ArrayList;
import java.util.List;
public class Node {
//左右节点、值
public Node leftNode;
public Node rightNode;
public Object value;
public void addData(Object v){
//如果当前节点没有值,就把数据放在当前节点上
if(null==value){
value=v;
}else{
//没有值就进行判断,新增的值与当前值的比较大小 大的右边,小的或者相等放左边
if((Integer)v-(Integer)value<=0){
if(null==leftNode){
leftNode = new Node();
}
leftNode.addData(v);
}else{
if(null == rightNode){
rightNode = new Node();
}
rightNode.addData(v);
}
}
}
//中序遍历所有的节点
public List<Object> values(){
List<Object> values = new ArrayList<>();
//左节点的遍历结果
if(null!=leftNode){
values.add(leftNode.values());
}
//当前节点
values.add(value);
//右节点的遍历结果
if(null!=rightNode){
values.add(rightNode.values());
}
return values;
}
public static void main(String[] args) {
//准备一个数组
int randoms[] =new int[]{55,6,13,45,16,23,28,9,50,36,18};
Node roots = new Node();
for(int num : randoms){
roots.addData(num);
}
System.out.println(roots.values());
}
}
控制台的输出结果:
[[6, [[9], 13, [[16, [[18], 23, [28, [36]]]], 45, [50]]]], 55]
不难发现,我们所给的数组就二叉树的形式进行排列了
其中遍历:二叉树的遍历分左序,中序,右序
左序即: 中间的数遍历后放在左边
中序即: 中间的数遍历后放在中间
右序即: 中间的数遍历后放在右边
如果你还在学习其他的算法可以设计一个例子可以比较性能:
题目:创建4万个随机数,然后用分别用冒泡法,选择法,二叉树3种排序算法进行排序,比较哪种更快
我可以先给你答案:二叉树最优 具体比较的代码请移步下一篇java——二叉树比较冒泡和选择排序
java中级——集合框架【2】-二叉树的更多相关文章
- java中级——集合框架【1】-ArrayList
集合框架----ArrayList 引子:我们先来看看传统数组的用法 写一个Hero对象类 package cn.jse.t1; public class Hero { public String n ...
- java中级——集合框架【4】-Collections
Collections 首先我们要知道Collections是一个类,容器的工具类,就如同Arrays是数组的工具类 反转 reverse 使List中的数据发生发转 package cn.jse.c ...
- java中级——集合框架【3】-HashSet
HashSet package cn.jse.hashset; import java.util.HashSet; public class TestCollection { public stati ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- java.util 集合框架集合
java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- java的集合框架set 和map的深入理解
Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...
随机推荐
- 试验一下Golang 网络爬虫框架gocolly/colly
参考:http://www.cnblogs.com/majianguo/p/8186429.html 框架源码在 github.com/gocolly/colly 代码如下(github源码中的dem ...
- SDOI2016 R1做题笔记
SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...
- hyperledge环境安装
1.安装环境 1)本机安装 前提是已经安装好了docker\docker-compose\go,相应的内容可见 docker-1-环境安装及例子实践 docker官方文档学习-1-Docker for ...
- fuser - 查看文件/网络端口等被什么进程占用
前提 linux环境下,当使用umount命令卸载挂载点时,会遇到“device is busy”提示,这时fuser就能查出谁在使用这个资源;当然umount –lf [挂载点] 也可以强制卸载 ...
- zookeeper的原理,5分钟了解zookeeper
一 .Zookeeper功能简介 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/ ...
- django一般架构思维导图
本例已django项目名称为myblog,其下面有2个应用blog和comment介绍:
- Python脱产8期 Day09 2019/4/23
内存管理 一.引用计数:垃圾回收机制的依据 1.变量的值被引用,该值的引用计数 +12.变量的值被解绑,该值的引用计数 -13.引用计数为0时就会被垃圾回收机制回收 二.引用计数会出现循环引用问题:相 ...
- [MicroPython]TurnipBit开发板旋转按钮控制直流电机转速
1.实验目的: 学习在PC机系统中扩展简单I/O 接口的方法 学习TurnipBit拼插编程 了解直流电机的工作原理 学习L298N的工作原理 学习TurnipBit扩展板L298N和按键模块的接线方 ...
- JVM-Java内存区域
JVM虚拟机运行时数据区结构分为: 其中方法区和堆是所有线程共享的内存区域,而Java栈.本地方法栈.程序计数器是线程私有的. 我们详细介绍运行时数据区的各个区域及其作用. 程序计数器: 一块较小的内 ...
- python redis存入字典序列化存储
在python中通过redis hset存储字典时,必须主动把字典通过json.dumps()序列化为字符串后再存储, 不然hget获取后将无法通过json.loads()反序列化为字典 序列化存储 ...