二叉树图:

    

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. Service Cloud 零基础(五)Trailhead学习 Embedded Chat

    本篇参考:https://trailhead.salesforce.com/content/learn/modules/web-chat 想一下我们为什么要用service cloud呢?为什么要有s ...

  2. jQuery实现游戏推荐

    1.需求:点击添加游戏按钮实现添加游戏,点击删除按钮,删除游戏. 2.实现思路:分别给添加按钮和删除按钮添加click事件. 3.遇到的问题:自己添加的游戏不能进行删除. 4.原因分析:文档加载完毕后 ...

  3. mobx 的学习

    1.初始化项目 第一步用create-react-app初始化一个项目,并打开webpack配置项 npx create-react-app react-mobx-demo cd react-mobx ...

  4. sort函数用于vector向量的排序

    参考资料: 关于C++中vector和set使用sort方法进行排序 作者注:这篇文章写得相当全面,包括对vector和set中不同数据类型(包括结构体)的排序,还有一些还没看懂--特作此摘录,供当前 ...

  5. Springboot项目启动后自动创建多表关联的数据库与表的方案

    文/朱季谦 在一些项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表. 若要解决这类需求,其实现在已有不少开源框架都能实现自动生成数据 ...

  6. 在linux系统中登录mysql时出现Enter password: ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)的解决办法

    在一次使用mysql数据库是出现了这种错误,于是乎去百度看了很多博文踩了很多坑,最终解决了问题,分享给大家. 转载与:https://blog.csdn.net/css33/article/detai ...

  7. python-3-3 字典

    一 元组(tuple) 1.元组也是一个list,他和list的区别是 元组里面的数据无法修改 元祖用()小括号表示,如果元祖里面只有一个元素的话,必须在这个元素的后面添加一个逗号,不然就不是元祖了 ...

  8. Java系列教程-MyBatis 3.5.5 教程目录

    MyBatis 3.5.5 初级教程目录 可参考MyBatis的官方文档也比较清楚 https://mybatis.org/mybatis-3/zh/getting-started.html 代码 目 ...

  9. Announcing cnblogs-hardening 1.0 Preview 1

    Release Notes Write about coding Note About coding Share about coding Talk about coding Comment abou ...

  10. VSCode中插件Code Spell Checker

    说在前面 介绍 Code Spell Checker 是在VSCode中的一款插件,能够帮助我们检查单词拼写是否出现错误,检查的规则遵循 camelCase (驼峰拼写法). 安装方法 打开VSCod ...