二叉树图:

    

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多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  2. 使用 xunit 编写测试代码

    使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...

  3. 基于docker搭建jenkins

    一.概述 Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎.Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各 ...

  4. const修饰符相关

    const修饰符相关 const修饰符表明一个变量是常量,大致分为三类:常量数组(等同于常量指针),常量指针,指向常量的指针. 常量数组中数据都是不可修改的,任何试图修改常量数组中的数据的操作都会报错 ...

  5. Linux速通04 用户、群组、权限

    用户及passwd文件 # /etc/passwd文件的功能:存储所有用户的相关信息,实际上是存放用户信息的数据库(database) # 各个字段的含义: * 第一个字段(列)记录的是这个用户的名字 ...

  6. Java 面向对象 05

    面向对象·五级 package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放      * 包其实就是文件夹 * B:包的概述     举例:        ...

  7. flask wtforms 的效验

    flask版 .py from flask import Flask, render_template, request, session, current_app, g, redirect from ...

  8. 基于CefSharp开发浏览器(九)浏览器历史记录弹窗面板

    一.前言 前两篇文章写的是关于浏览器收藏夹的内容,因为收藏夹的内容不会太多,故采用json格式的文本文件作为收藏夹的存储方式. 关于浏览器历史记录,我个人每天大概会打开百来次网页甚至更多,时间越长历史 ...

  9. 关于go中并发的初步理解

    1.一些概念的介绍: 概念 描述 进程 在内存中的程序.有自己独立的独占的虚拟 CPU .虚拟的 Memory.虚拟的 IO devices. (1) 每一进程占用独立的地址空间. 此处的地址空间包括 ...

  10. linux安装mysql8.0

    linux 上安装mysql8.0 mysql版本8.0.16 MySQL Community 操作系统centos7 准备工作: mysql8.0 rpm文件 安装步骤: 1. 下载mysql的re ...