二叉树图:

    

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实现二叉树的更多相关文章

  1. 【Java】 二叉树的遍历(递归与循环+层序遍历)

    在[Java] 大话数据结构(9) 树(二叉树.线索二叉树)一文中,已经实现了采用递归方法的前.中.后序遍历,本文补充了采用循环的实现方法.以及层序遍历并进行了一个总结. 递归实现 /* * 前序遍历 ...

  2. 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码

    20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...

  3. Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...

  4. Java实现二叉树及相关遍历方式

    Java实现二叉树及相关遍历方式 在计算机科学中.二叉树是每一个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(r ...

  5. 数据结构:JAVA实现二叉查找树

    数据结构:JAVA实现二叉查找树 写在前面 二叉查找树(搜索树)是一种能将链表插入的灵活性与有序数组查找的高效性结合在一起的一种数据结构. 观察二叉查找树,我们发现任何一个节点大于左子节点且小于其右子 ...

  6. 数据结构与算法——常用高级数据结构及其Java实现

    前文 数据结构与算法--常用数据结构及其Java实现 总结了基本的数据结构,类似的,本文准备总结一下一些常见的高级的数据结构及其常见算法和对应的Java实现以及应用场景,务求理论与实践一步到位. 跳跃 ...

  7. java实现二叉树的Node节点定义手撕8种遍历(一遍过)

    java实现二叉树的Node节点定义手撕8种遍历(一遍过) 用java的思想和程序从最基本的怎么将一个int型的数组变成Node树状结构说起,再到递归前序遍历,递归中序遍历,递归后序遍历,非递归前序遍 ...

  8. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  9. 数据结构-堆 Java实现

    数据结构-堆 Java实现. 实现堆自动增长 /** * 数据结构-堆. 自动增长 * */ public class Heap<T extends Comparable> { priva ...

随机推荐

  1. 读懂框架设计的灵魂—Java反射机制

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  2. 五大自动化测试的Python框架

    1.Robot Framework 作为最重要的Python测试框架之一,Robot Framework主要被用在测试驱动(test-driven)类型的开发与验收中.虽然是由Python开发而来,但 ...

  3. pdf转换成文本解决格式不统一问题

    pdf转换成文本解决格式不统一问题 懒得调OCR服务了,所以快速解决的方法是: pdf转png:https://pdf2png.com/zh/ png转统一格式pdf:adobe acrobat自带增 ...

  4. Linux速通07 硬盘分区、格式化及文件系统管理

    硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...

  5. mysql基本指令2

    pymysql:  - 连接.关闭(游标)  - execute()   -- SQL注入    sss' or 1=1 --   - 增删改: conn.commit()  - fetchone f ...

  6. FreeBSD 将降低对 i386 架构的支持力度

    FreeBSD 开发团队宣布,从 FreeBSD 13.0 开始,对 i386 架构的支持级别将降级为 Tier 2,未来的 14.0 可能还将会在此基础上进一步降低对 i386 架构的支持.而对于 ...

  7. Apache配置 6. 访问日记切割

    日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件 (1)配置 (1)配置 # vim /usr/local/apache2 .4/conf/extra/httpd-vh ...

  8. 《进击吧!Blazor!》系列入门教程 第一章 7.图表

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  9. python-自定义一个序列

    python的序列可以包含多个元素,开发者只要实现符合序列要求的特殊方法,就可以实现自己的序列 序列最重要的特征就是可以包含多个元素,序列有关的特使方法: __len__(self):该方法的返回值决 ...

  10. 攻防世界 reverse secret-string-400

    secret-string-400 school-ctf-winter-2015 解压文件得到html和js文件 Task.html <html> <head> <tit ...