二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为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. Closure Compiler应用程序使用入门[译]

    Hello World示例 Closure Compiler应用程序是一个Java 命令行工具,用来对JavaScript代码进行压缩.优化和排错.按照下面的步骤,用一个简单的JavaScript程序 ...

  2. C#用Oracle.DataAccess中连接Oracle要注意版本问题!转)

    一般人,不包括全部平时在开发中使用的都是32位的PC机,所以安装的也是Oracle32位的客户端.但是一般服务器都是64位的,安装的也是 64位的Oracle客户端,如果要部署使用Oracle.Dat ...

  3. 开发人员常用的DOS命令

    1.远程连接:mstsc /admin 2.开启服务:services.msc 3.打开注册表:regedit 4.IIS服务器重启:iisreset 5.打开记事本:notepad 6.查看系统信息 ...

  4. Python 的AES加密与解密-需要安装的模块

    踩雷1: #先导入所需要的包 pip3 install Crypto #再安装pycrtpto pin3 install pycrypto from Crypto.Cipher import AES ...

  5. OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor

    在python用cv2.imread()读取图片的时候一直报错,检查了图片的绝对路径是存在的. 报错的图片用skimage.io.imread()是可以读的. 查了一下,有可能是原图片文件有什么嵌入错 ...

  6. OpenGL学习笔记(1) 画一个三角形

    最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...

  7. (转)CentOS7系统信息及运行情况查看

    原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...

  8. xml解析数据信息并实现DBManager操作mysql

      先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用xml封装起来 以至于我每次都只要修改一下我的 ...

  9. 高可用OpenStack(Queen版)集群-13.分布式存储Ceph

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  10. Codeforces1084 | Round526Div2 | 瞎讲报告

    目录 A. The Fair Nut and Elevator B.Kvass and the Fair Nut C.The Fair Nut and String D.The Fair Nut an ...