二叉查找树代码java+运行结果
时间:2022-07-28
本文章向大家介绍二叉查找树代码java+运行结果,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.代码
package TestTree;/*
* zt
* 2020/8/3
* 14:41
*二叉查找树:
*/
public class BinarySortTree {
//根节点
private Node root;
//元素个数
private int size;
public int getSize() {
return size;
}
//添加元素
public void add(int v){
if(root==null){//当前树是空的
root = new Node(v);
size++;
System.out.println("添加了根元素"+v);
}else{//不是空
//给根添加子节点
if(root.addChild(v)){
size++;
}
}
}
//中序遍历
public void middleleList(){
root.printNode();
}
/*
节点类型
*/
static class Node {
//元素值
private int item;
//左节点
private Node left;
//右节点
private Node right;
public Node(int item) {
this.item = item;
}
//添加孩子节点方法
public boolean addChild(int v) {
if (this.item > v) {//v放在左边
if (this.left == null) {//左边没有元素
this.left = new Node(v);
System.out.println(v+"放在"+this.item+"的左边");
} else {
return this.left.addChild(v);//递归(可能出现重复元素false的情况)
}
}else if(this.item<v){
if(this.right==null){
this.right=new Node(v);
System.out.println(v+"放在"+this.item+"的右边");
}else{
return this.right.addChild(v);
}
}else{
System.out.println(v+"重复元素");
return false;
}
return true;
}
//打印元素
public void printNode(){
//判断左边的,如果有元素就打印
if(this.left!=null){
this.left.printNode();
}
//打印中间的
System.out.println(this.item);
//判断右边的,如果有元素就打印
if(this.right!=null){
this.right.printNode();
}
}
}
}
将main方法写在了另一个测试类里面
package TestTree;/*
* zt
* 2020/8/3
* 15:03
*
*/
public class TestBinarySortTree {
public static void main(String[] args) {
BinarySortTree tree = new BinarySortTree();
tree.add(10);
tree.add(30);
tree.add(30);
tree.add(40);
tree.add(50);
System.out.println("元素个数:"+tree.getSize());
tree.middleleList();
}
}
2.运行结果
添加了根元素10
30放在10的右边
30重复元素
40放在30的右边
50放在40的右边
元素个数:4
10
30
40
50
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CentOS7搭建Zabbix4.2系统
- vue项目更换favicon.ico
- 一种O(n)的排序——计数排序引发的围观风波
- LeetCode 04寻找两个正序数组的中位数(困难)二分法
- Java程序员面试必备:Volatile全方位解析
- HTTP协议基础及发展历史
- Vi 和 Vim 的使用
- k8s删除Terminating状态的命名空间
- CentOS7下vsftpd over SSL/TLS加密传输配置实践
- Xargs Sh -c Skipping the First Argument
- Centos系统安装
- Python 为什么能支持任意的真值判断?
- Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
- Python计算大文件行数方法及性能比较
- docker容器部署Prometheus服务——云平台监控利器