数据结构(5):Java实现二叉树
二叉树图:

package com.test.Sort; import java.util.ArrayList;
import java.util.LinkedList; public class Binary_Tree {
//java实现二叉树实现
public static void main(String[] args) {
Tree t =new Tree();
t.add("A");
t.add("B");
t.add("C");
Node root = t.getRoot();
//先序遍历
System.out.println("先序遍历:");
t.Preorder(root);
System.out.println("------------------------");
//中序遍历
System.out.println("中序遍历:");
t.inOrder(root);
System.out.println("------------------------");
//后序遍历
System.out.println("后序遍历:");
t.postOrder(root);
} } //节点类
class Node{
//头节点
private String node;
//左节点
private Node iLnode;
//右节点
private Node iRnode; public Node(String node){
this.node = node;
} public String getNode() {
return node;
} public void setNode(String node) {
this.node = node;
} public Node getiLnode() {
return iLnode;
} public void setiLnode(Node iLnode) {
this.iLnode = iLnode;
} public Node getiRnode() {
return iRnode;
} public void setiRnode(Node iRnode) {
this.iRnode = iRnode;
}
} //创建二叉树
class Tree{
private Node root;
public Tree(){}; public Node getRoot() {
return root;
} public void setRoot(Node root) {
this.root = root;
} /**
*
* 递归实现先序遍历
* 先序遍历 在先序遍历中,我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树
* 根节点->左子树->右子树
* 他的顺序是:
* A
* B C
*
* 先序遍历是:A为根节点,左子数节点B,右子数节点C
* **/
public void Preorder(Node node){
//如果先序遍历的根节点是空的,直接退出
if(node==null)
return;
System.out.println(node.getNode());
Preorder(node.getiLnode());
Preorder(node.getiRnode());
} /**
* 中序遍历
*
* 中序遍历:左子数节点B,A为根节点,右子数节点C
*
* **/
public void inOrder(Node node){
//如果先序遍历的根节点是空的,直接退出
if(node==null)
return;
inOrder(node.getiLnode());
System.out.println(node.getNode());
inOrder(node.getiRnode());
} /**
* 后序遍历
* 后序遍历:左子数节点B,右子数节点C,A为根节点,
*
* **/
public void postOrder(Node node){
//如果先序遍历的根节点是空的,直接退出
if(node==null)
return;
postOrder(node.getiLnode());
postOrder(node.getiRnode());
System.out.println(node.getNode());
} public void add(String elem){
Node node = new Node(elem);
//如果二叉树节点是空的
if(root==null){
//把传递进去的node传递给root,此时root有数据
root = node;
return;
}else{
//定义个list列表
LinkedList linkedList =new LinkedList();
//列表中添加root节点数据
linkedList.add(root);
//如果列表不为空
while(!linkedList.isEmpty()){
//移出第一个元素
Node element = (Node) linkedList.pop();
if(element.getiLnode()==null){
//左节点为空,设置左节点
element.setiLnode(node);
return;
}else if(element.getiRnode()==null){
//右节点为空,设置右节点
element.setiRnode(node);
return;
}else{
//如果左右子树都不为空,继续加入数据
linkedList.add(element.getiLnode());
linkedList.add(element.getiRnode());
}
}
}
}
}
输出:

一个抽象概念:
同一个对象调用方法
以二叉树为例:
只有add方法,当add(a)时, 那么此时头节点就是a,当add(b)的时候,头节点不会是b,b只能左节点和右节点。 如果是不同的对象调用add方法,那么头节点是a也可以是b
原理:同一个对象之间数据互相影响
不同对象的之间互不干涉
数据结构(5):Java实现二叉树的更多相关文章
- 【Java】 二叉树的遍历(递归与循环+层序遍历)
在[Java] 大话数据结构(9) 树(二叉树.线索二叉树)一文中,已经实现了采用递归方法的前.中.后序遍历,本文补充了采用循环的实现方法.以及层序遍历并进行了一个总结. 递归实现 /* * 前序遍历 ...
- 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码
20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...
- Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
- Java实现二叉树及相关遍历方式
Java实现二叉树及相关遍历方式 在计算机科学中.二叉树是每一个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(r ...
- 数据结构:JAVA实现二叉查找树
数据结构:JAVA实现二叉查找树 写在前面 二叉查找树(搜索树)是一种能将链表插入的灵活性与有序数组查找的高效性结合在一起的一种数据结构. 观察二叉查找树,我们发现任何一个节点大于左子节点且小于其右子 ...
- 数据结构与算法——常用高级数据结构及其Java实现
前文 数据结构与算法--常用数据结构及其Java实现 总结了基本的数据结构,类似的,本文准备总结一下一些常见的高级的数据结构及其常见算法和对应的Java实现以及应用场景,务求理论与实践一步到位. 跳跃 ...
- java实现二叉树的Node节点定义手撕8种遍历(一遍过)
java实现二叉树的Node节点定义手撕8种遍历(一遍过) 用java的思想和程序从最基本的怎么将一个int型的数组变成Node树状结构说起,再到递归前序遍历,递归中序遍历,递归后序遍历,非递归前序遍 ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- 数据结构-堆 Java实现
数据结构-堆 Java实现. 实现堆自动增长 /** * 数据结构-堆. 自动增长 * */ public class Heap<T extends Comparable> { priva ...
随机推荐
- CSS实现页面切换时的滑动效果
最近在开发手机端APP页面功能时遇到一个需求:某个页面查询的数据有三种分类,需要展示在同一页面上,用户通过点击分类标签来查看不同类型的数据, 期望效果是 用户点击标签切换时另一个页面能够以一个平滑切入 ...
- Cannot resolve MVC View
在搭建springboot项目时报错:Cannot resolve MVC View "index" 那是因为在pom中缺少依赖 <dependency> <gr ...
- 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤
简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...
- 有钱人买钻石+dfs中使用贪心
有钱人买钻石 ECNU-3306 题解:这个题目,乍一看以为是dp背包,可是数据量却那么大,只有1,5,10,25四种面额的硬币,每种数量若干,要使得能够刚好兑换成功总金额,在此前提下,还要使得硬币数 ...
- 小程序基于Token登录 示意图
- 关于主机不能访问虚拟机的web服务解决
centos7默认并没有开启80端口,我们只有开启就行 [root@localhost sysconfig]# firewall-cmd --permanent --add-port=3032/tcp ...
- Nacos常用配置
属性配置 1. 配置年级是否显示 这里配置的屏蔽的年级,在运营后台去删掉相关id就行了 2. 过滤标签显示特定课程数据 指定 yaml 文件显示 course.tagCourse.tagName=寒假 ...
- 从零学脚手架(八)---webpack-dev-server源码分析
上一篇中介绍了webpack-dev-server属性配置 这一篇就简单的梳理下webpack-dev-server内部实现. 由于涉及到源码解析,所以会涉及到一些比较难啃的知识,我会尽量进行简单化描 ...
- Reverse 高校网络信息安全运维挑战赛
Reverse 高校网络信息安全运维挑战赛 1 signed int sub_403CC0() 2 { 3 unsigned int v0; // eax 4 int key_lens; // eax ...
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...