二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为2,也就是每个节点只有一个左子树和一个右子树。二叉树的操作主要为创建,先序遍历,中序遍历,后序遍历。还有层次遍历。遍历有两种方式,一是采用递归的方式,二是采用转换为栈进行遍历,对二叉树的遍历本质上市将非线性结构转换为线性序列。

 package tree;

 import java.util.ArrayList;
import java.util.List;
import java.util.Queue; //通过先序方式将数组依次添加到二叉树
public class CreateTreeByArray<E> {
public static class Node<E>{
Node<E> left = null; //左子树
Node<E> right = null; //右子树
E data = null; //数据域 //初始化节点
public Node(E data){
this.data = data;
this.left = null;
this.right = null;
} public Node(){ }
}
private Node<E> root = null; //根节点
private List<Node<E>> list = null; //节点列表,用于将数组元素转化为节点 public Node<E> getRoot(){
return this.root;
} //将将数组转化为一颗二叉树,转换规则:依次为节点列表中节点的左右孩子赋值。左孩子为i*2+1,右孩子为i*2+2
@SuppressWarnings("unchecked")
public void createTreeByArray(Object[] array){
this.list = new ArrayList<Node<E>>(); //将数组添加到节点列表
for (int i = 0; i < array.length; i++) {
list.add(new Node<E>((E) array[i]));
} System.out.println("头节点->" + list.get(0).data);
this.root = new Node<E>(list.get(0).data); //根节点 //为二叉树指针赋值
for(int j = 0; j < (list.size() / 2); j ++){
try {
//为左子树赋值 j*2+1
list.get(j).left = list.get(j * 2 + 1);
System.out.println("节点" + list.get(j).data + "左子树 ->" + list.get(j * 2 + 1).data);
//为右子树赋值 j*2+2
list.get(j).right = list.get(j * 2 + 2);
System.out.println("节点" + list.get(j).data + "右子树 ->" + list.get(j * 2 + 2).data);
} catch (Exception e) { }
} } //先序遍历二叉树
public void Indorder(Node<E> root){
if(root == null){
return;
}
System.out.println(root.data);
Indorder(root.left); //递归输出左子树
Indorder(root.right); //递归遍历右子树
} //中序遍历二叉树
public void inOrderTraverse(Node<E> root){
if(root == null){
return;
}
inOrderTraverse(root.left); //遍历左子树
System.out.println(root.data);
inOrderTraverse(root.right); //遍历右子树
} //后序遍历
public void postOrderTraverse(Node<E> root){
if(root == null){
return;
}
postOrderTraverse(root.left); //遍历左子数节点
postOrderTraverse(root.right); //遍历右子树节点
System.out.println(root.data); //从下往上遍历
} public static void main(String[] args) {
CreateTreeByArray<Integer> createTreeByArray = new CreateTreeByArray<Integer>();
Object[] arrays = {new Integer(1),new Integer(2),new Integer(3),new Integer(4),5,6,7,8,9,10};
createTreeByArray.createTreeByArray(arrays);
System.out.println("===============================");
createTreeByArray.postOrderTraverse(createTreeByArray.list.get(0)); } }

数据结构之二叉树java实现的更多相关文章

  1. 二叉树JAVA实现

    为了克服对树结构编程的畏惧感和神秘感,下定决心将二叉树的大部分操作实现一遍,并希望能够掌握二叉树编程的一些常用技术和技巧.关于编程实现中的心得和总结,敬请期待!~ [1]  数据结构和表示: 二叉树的 ...

  2. 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)

    数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...

  3. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  4. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  5. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

  6. 《数据结构与算法分析-Java语言描述》 分享下载

    书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...

  7. 数据结构--队列(Java实现)

    数据结构--队列(Java实现) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 队列是一种特殊的线性表,特殊之处在于它只 ...

  8. 数据结构与算法 java描述 第一章 算法及其复杂度

    目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...

  9. java数据结构之二叉树的实现

    java二叉树的简单实现,可以简单实现深度为n的二叉树的建立,二叉树的前序遍历,中序遍历,后序遍历输出. /** *数据结构之树的实现 *2016/4/29 * **/ package cn.Link ...

随机推荐

  1. python json.dumps中文乱码

    json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: >>> import json>>> js = json.lo ...

  2. js,jsp里将数据库Date类型获取出来后格式化显示于界面

    js:new Date(rowdata.updateTime).format("yyyy-MM-dd hh:mm:ss") jsp: <fmt:formatDate valu ...

  3. centos7上的postgresql10安装和配置

    安装数据库 安装参考官方文档:https://www.postgresql.org/download/linux/redhat/ 1.Install the repository RPM: yum i ...

  4. 我用Python远程探查室友的网页浏览记录,他不愧是成年人!

    过程: 利用Python制作远程查看别人电脑的操作记录,与其它教程类似,都是通过邮件返回. 利用程序得到目标电脑浏览器当中的访问记录,生产一个文本并发送到你自己的邮箱,当然这个整个过程除了你把pyth ...

  5. could not launch process: decoding dwarf section info at offset 0x0: too short

    Fabric调试异常 作者在使用chaincode进行智能合约开发的过程中,使用Goland + Golang + win10_X64作为开发环境: GoLand 2018.1.4 Build #GO ...

  6. XGB算法梳理

    学习内容: 1.CART树 2.算法原理 3.损失函数 4.分裂结点算法 5.正则化 6.对缺失值处理 7.优缺点 8.应用场景 9.sklearn参数 1.CART树 CART算法是一种二分递归分割 ...

  7. uptime命令详解

    基础命令学习目录首页 users个数和窗口数一致 原文链接:https://www.cnblogs.com/ultranms/p/9253217.html uptime 另外还有一个参数 -V(大写) ...

  8. [linux] LVM原磁盘扩容(非增加磁盘)

    阿里云机器,ECS运行时磁盘由300G扩容到500,重启机器生效后登录.可以看到/data目录总大小300G,/dev/vdb已经扩容到500G. [root@HD1g-elasticsearch2 ...

  9. 如何在静态方法或非Spring Bean中注入Spring Bean

           在项目中有时需要根据需要在自己new一个对象,或者在某些util方法或属性中获取Spring Bean对象,从而完成某些工作,但是由于自己new的对象和util方法并不是受Spring所 ...

  10. 浅谈!DOCTYPE声明的作用?严格模式与混杂模式的区别?

    !DOCTYPE的作用: DOCTYPE是Document Type(文档类型)的缩写,<!DOCTYPE>声明必须是html文档的第一行,位于<html>标签之前.<! ...