二叉树基础实现|学习笔记

简介: 快速学习 二叉树基础实现

开发者学堂课程【Java 高级编程二叉树基础实现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/20/detail/364


二叉树基础实现


内容介绍:

1. person

2. comparable 使用范例

 

在实现二叉树的处理之中最为关键性的问题在于数据的保存,而且数据由于牵扯到对象比较的问题,那么一定要有比较器的支持,而这个比较器首选的一定就是Comparable,所以本次将保存一个 Person 类数据

 

person 类:

class Person implements Comparable<Person> {

private String name;

private int age;

public Person(String name,int age)}

this. name=name;

this. age=age;

}

⑥override

public int com pareTo(Person per) {

return this age-per. age;

}

//无参构造、setter、getter略

@override

public string tostring() {return“ 【Person类对象】姓名:”+this.name+“、年龄.”+this. age+“\n”;}

}

 

随后如果要想进行数据的保存,首先一定需要有一个节点类。节点类里面由于牵扯所以必须使用 comparable(可以区分大小);

package cn. midn. demo;

public class JavaAPIDemo {

public static void main(String[] args) { 

BinaryTree<Person>  tree = new BinaryTree<Person>();

tree. add(new Person(“小强-80”,80));

tree. add(new Person(“小强-30”,30));

tree. add(new Person(“小强-50”,50));

tree. add(new Person(“小强-60”,60));

tree. add(new Person("小强-90",90));

System. out. println(Arrass. to String(tree. to Array());

}

}


/**

* 实现二叉树操作

* @param<T> 要进行二叉树的实现

*

*/

class BinaryTree<T extends Comparable<T>> {

private class Node{

private Comparable<T>data;//存放Comparable.可以比较大小

private Node parent;_//保存父节点

private Node left;//保存左子树

private Node right;//保存右子树

public Node(Comparable<T> data) {(//构造方法直接负责进行数据的存储

this.data=data;

}

/**

*  实现节点数据的适当位置的存储

*  @param newNode 创建的新节点

*/

public void addNode(Node newNode) {

if (newNode.data.compareTo((T)this.data) <=0) {

if (this.left == null) {  //现在没有左子树

       this.left = newNode;  //保存左子树

      newNode.parent = this;//保存父节点

} else { //需要向左边继续判断

this.left.addNode(newNode); //继续向下判断

}

} else {  //比根节点的数据要大

if (this.right == null) {

this.right = newNode ;//没有右子树

newNode.parent = this ;//保存父节点}

}  else {

  this.right.addNode(newNode); //继续向下判断

}

}

} /*

*实现所有数据的获取处理,按照中序遍历的形式来完成

*/

 

public void to ArrayNode() {

if(this. Left ! =  null) { //有左子树

this. left.toArrayNode();//递归调用

}

BinaryTree. this.returnData[BinaryTree. this.foot ++] = this.data

if(this. right's null){

this. right.toArrayNode();

}

}

}

//----------以下为二叉树的功能实现------------

private Node root ; //保存的是根节点

private int count;//保存数据个数

private Object [] retuenData;//返回的数据

private int foot = 0;//脚标控制

/**

*  进行数据的保存

*  @param data 要保存的数据内容

*  @exception NullPointerException 保存数据为空时抛出的异常

*/

public void add(Comparable<T> data ) {

   if (data == null) {

         throw new NullPointerException(“保存的数据不允许为空!”);

}

// 所有的数据本身不具备有节点关系的匹配,那么一定要将其包装在 Node 类之中

Node newNode = new Node(data);//保存根节点

if(this.root == null) {//现在没有根节点,则第一个节点作为根节点

this.root = newNode ;

} else { //需要为其保存到一个合适的节点

This.root.addNode(newNode);//交友Node类负责处理

}

This.count++;

}

/**

*以对象数组的形式返回全部数据,如果没有数据返回null

*@return全部数据

*

*/

public Object[] toArray() {

if(this. count==0){

return null;

}

This.returnData = new Object[this.count];//保存长度为组长长度

this. foot=0;//脚标清零

this. root.toArrayNode();//直接通过Node类负责

return this.returnDataj//返回全部的数据

}

}

在进行数据添加的时候只是实现了节点关系的保存,而这种关系保存后的结果就是所有数据都属于有序排列。

相关文章
|
5月前
|
程序员 C++
二叉树——基础知识详解
二叉树——基础知识详解
29 0
|
5月前
|
存储 算法 数据管理
【C++入门到精通】C++入门 ——搜索二叉树(二叉树进阶)
在C++中,本文介绍了搜索二叉树(二叉搜索树,BST)的概念和基本操作,包括搜索、插入和删除。搜索操作从根节点开始,按值大小决定左右查找;插入操作找到合适位置新建节点;删除操作需考虑无子节点、单子节点和双子节点的情况。文中还提供了非递归和递归实现的C++代码示例。此外,讨论了搜索二叉树在K模型和KV模型中的应用以及性能分析,强调了保持树平衡的重要性。
46 0
|
存储 算法
树和二叉树基础概念
树是一种非线性的数据结构,它是由n(n&gt;=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
|
存储 C++
【C++进阶】三、二叉搜索树
目录 一、二叉搜索树 1.1 概念 1.2 二叉搜索树操作 二、二叉搜索树实现 2.1 框架总览 2.2 实现接口总览 2.2.1 构造函数 2.2.2 拷贝构造 2.2.3 赋值重载 2.2.4 析构函数 2.2.5 二叉搜索树的遍历 2.2.6 插入函数 2.2.7 查找函数 2.2.8 删除函数 2.3 二叉搜索数完整代码 三、二叉搜索树的应用 3.1 K模型 3.2 KV模型 四、二叉搜索树的性能分析
56 0
【C++进阶】三、二叉搜索树
|
存储 Java
【Java数据结构】二叉树基本知识-二叉树遍历
Java数据结构 & 二叉树基本知识 & 二叉树遍历
117 0
|
存储
树和二叉树的基本概念
1.树的概念: a.树是一种非线性的数据结构,它是由n(n&gt;=0)个有限结点组成一个具有层次关系的集合。 b.把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 c.有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M&gt;0)个互不相交的集合T1、T2、……、Tm,其中每一个集 合Ti(1&lt;= i &lt;= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以 有0个或多个后继 因此,树是递归定义的。 .
85 0
树和二叉树的基本概念
|
存储 算法 C++
【树和二叉树】—— 九道习题,难易结合,手把手掌握树的基本知识
【树和二叉树】—— 九道习题,难易结合,手把手掌握树的基本知识
104 0
【树和二叉树】—— 九道习题,难易结合,手把手掌握树的基本知识
|
存储 Java 索引
【笔记13】二叉搜索树的概念
二叉搜索树的Java实现
82 0
【笔记13】二叉搜索树的概念