今天学习的是二叉树的相关知识。二叉树是树的一种,因为他每个结点最多只有2个子结点,所以叫做二叉树。链表实际上很像是树的特殊情况。二叉树有很多种,其中著名的就有二叉查找树和霍夫曼树。
引用
二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于2。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。
以下是我的二叉树的结点类代码:
public class TNode {
private Object obj;
private TNode parent;
private TNode left;
private TNode right;
public TNode(Object obj){
this.obj = obj;
}
public TNode(){
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public TNode getParent() {
return parent;
}
public void setParent(TNode parent) {
this.parent = parent;
}
public TNode getLeft() {
return left;
}
public void setLeft(TNode left) {
this.left = left;
}
public TNode getRight() {
return right;
}
public void setRight(TNode right) {
this.right = right;
}
}
以下是二叉树的类(其中实现了将一个数组形成二叉查找树)
public class BinaryTree {
private static TNode root;
public BinaryTree() {
}
/**
* 重写二叉树的构造方法
*
* @param obj
*/
public BinaryTree(Object obj) {
root = new TNode(obj);
}
/**
* 将整型数组转化为一棵二叉查找树
*
* @param Array
* 待转化的数组
*/
public void ArraytoTree(int[] Array) {
if(Array.length == 0){
throw new RuntimeException("数组长度为0,没有元素用来建树!");
}
int first = Array[0];
root = new TNode(first);
for (int i = 1; i < Array.length; i++) {
addofBST(root, Array[i]);
}
}
/**
* 将一个数以二叉查找树的顺序插入树中
*
* @param node
* @param value
*/
public void addofBST(TNode node, int value) {
TNode current;
if ((Integer) node.getObj() >= value) {
if (node.getLeft() != null) {
current = node.getLeft();
addofBST(current, value);
}else{
current = new TNode(value);
current.setParent(node);
node.setLeft(current);
}
}else{
if (node.getRight() != null) {
current = node.getRight();
addofBST(current, value);
}else{
current = new TNode(value);
current.setParent(node);
node.setRight(current);
}
}
}
/**
* 以选定模式遍历打印二叉树
*
* @param node
* 二叉树起始结点
* @param style
* 模式,1为中左右,0为左中右,-1为左右中
*/
public void printTree(TNode node, int style) {
if (node != null) {
if (style == 1) {
// 打印此结点
Object obj = node.getObj();
System.out.println(obj);
// 得到它的左子结点,并递归
TNode left = node.getLeft();
printTree(left, style);
// 得到它的右子结点,并递归
TNode right = node.getRight();
printTree(right, style);
} else if (style == 0) {
// 得到它的左子结点,并递归
TNode left = node.getLeft();
printTree(left, style);
// 打印此结点
Object obj = node.getObj();
System.out.println(obj);
// 得到它的右子结点,并递归
TNode right = node.getRight();
printTree(right, style);
} else if (style == -1) {
// 得到它的左子结点,并递归
TNode left = node.getLeft();
printTree(left, style);
// 得到它的右子结点,并递归
TNode right = node.getRight();
printTree(right, style);
// 打印此结点
Object obj = node.getObj();
System.out.println(obj);
}
}
}
}
分享到:
相关推荐
java二叉树源码cuda-word2vec CBOW模型的cuda实现 特征 与 Nvidia GPU 并行加速 对于任意大的训练集需要恒定的内存 流实现不需要训练数据随机访问 自动验证并在训练期间显示验证数据负对数似然 支持自定义词二叉树...
异常处理:Java中的异常类型、异常处理机制、如何自定义异常等。 IO流:Java中常用的文件读写、序列化和反序列化等操作。 多线程编程:线程的基本概念、线程同步、线程安全、死锁等问题。 JDBC:Java与数据库的交互...
二叉树,自定义Java列表,气泡排序,深度优先搜索 Java 8 Lambda Java函数 Java注解 运行测试 克隆此存储库: git clone https://github.com/sainik73/hello-world 使用Maven构建项目: cd hello-world/ mvn ...
java二叉树源码android-python27 将 Python 2.7(3.2 和其他)解释器和您的脚本嵌入到 Android APK 中: 该项目的目标是帮助人们将 Python for Android 解释器与他们的脚本一起嵌入到一个不需要单独下载解释器的 APK...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
1.6.3 自定义方法 1.6.4 System.out.println的使用 1.6.5 一个简单而完整的程序 1.7 顺序结构 1.8 分支结构 1.8.1 if...else分支结构 1.8.2 if...else嵌套 1.8.3 switch语句 1.8.4 编程实例 1.9 循环结构 1.9.1 ...
4.7 自定义异常类 4.8 异常应用的其他问题 4.9 异常应用举例 五、线程 1、线程的概念 1.1 程序、进程与线程 1.2 线程调度与优先级 1.3 线程的状态与生命周期 1.4 控制一个线程生命周期最常用的方法 2、线程的创建...
ItemTester实现自定义Java对象,并测试其属性和方法。 PrescottLukeH2 Java中巴比伦平方根方法的递归实现。 PrescottLukeH3 Java中的链表实现。 普雷斯科特·卢克H4 Java中的堆栈和队列实现。 普雷斯科特·卢克...
概述: 在java集合中,TreeSet集合和TreeMap集合底层数据结构都是自平衡二叉树,所以在这两个集合中添加元素的时候会实现自动排序,排序方式为中序排序(即左根右的方式进行排序,详情请见二叉树数据结构,这里不做...
6.12 二叉树3c1F7u0~!a"h!@1v9o 6.13 小结 C7L6H9u ] Q7d:D;c&r第7章 图形用户界面的设计与实现 5F!k1c:j$H4N(W7.1 图形用户界面概述 6d0k$J3Q0A6u3Lwww.mscbsc.com7.2 用户自定义成分 "n/d3[;t3u8G,A&p&|MSCBSC ...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
基于Java中最基础的数组,自定义二次封装实现了一个动态数组: 1.自定义一个数组类Array,使用泛型,让数组类支持存储任意元素。 注意:Java不支持new泛型,只能是先new个Object出来,然后强制类型转换为泛型类型。 ...
使用JavaScript,TypeScript,Go和Java的数据结构和算法问题 数据结构和算法问题,以及针对不同语言的解决方案说明和实现 :bar_chart: 按主题组织 二叉树 -硬 -中 -中 -中 -简单 -中 堆 -中 -困难 弦乐 简单 通过...
分配2-实现一个链接列表以支持对自定义ReallyLongInt类的算术运算 作业3-从给定的文本文件中创建一个单词查找器游戏,并递归搜索用户输入的单词 作业4-在变长和阶数数组上测量Quiksort,3 Quicksort中位数和...
普通树和二叉树 弹性搜索 es6.6版本的api实践 elasticsearch-7.6 里边分为7.6版本的加密介绍以及7.6版本正常的api实践,关于加密的详细介绍文章介绍。 卡夫卡 kafka肤浅学习 网络学习 netty肤浅学习 四郎 本模块主要...
无论是刚开始接触面向对象编程的新手,还是打算转移到c#的具有c,c++或者java基础的程序员,都可以从本书中吸取到新的知识。 作译者 john sharp,content master首席技术专家。content master隶属于cm集团,cm集团...
Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户 创建角色 SQL> create role admin; 授权给角色 SQL> grant connect,resource to admin; 撤销角色的权限 SQL> revoke connect from admin; ...