目录:

1.把一个数组的值赋值给一颗二叉树

2.具体代码

1.树的构建方法

package tree;

import java.util.LinkedList;
import java.util.List;

/**
* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历
*
* 参考资料0:数据结构(C语言版)严蔚敏
*
* 参考资料1:http://zhidao.baidu.com/question/81938912.html
*
* 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java
*
* @author ocaicai@yeah.net @date: 2011-5-17
*
*/
public class BinTreeTraverse2 {

private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static List<Node> nodeList = null;

/**
* 内部类:节点
*
* @author ocaicai@yeah.net @date: 2011-5-17
*
*/
private static class Node {
Node leftChild;
Node rightChild;
int data;

Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
}

public void createBinTree() {
nodeList = new LinkedList<Node>();
// 将一个数组的值依次转换为Node节点
for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
nodeList.add(new Node(array[nodeIndex]));
}
// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树
for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
// 左孩子
nodeList.get(parentIndex).leftChild = nodeList
.get(parentIndex * 2 + 1);
// 右孩子
nodeList.get(parentIndex).rightChild = nodeList
.get(parentIndex * 2 + 2);
}
// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
int lastParentIndex = array.length / 2 - 1;
// 左孩子
nodeList.get(lastParentIndex).leftChild = nodeList
.get(lastParentIndex * 2 + 1);
// 右孩子,如果数组的长度为奇数才建立右孩子
if (array.length % 2 == 1) {
nodeList.get(lastParentIndex).rightChild = nodeList
.get(lastParentIndex * 2 + 2);
}
}

/**
* 先序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void preOrderTraverse(Node node) {
if (node == null)
return;
System.out.print(node.data + " ");
preOrderTraverse(node.leftChild);
preOrderTraverse(node.rightChild);
}

/**
* 中序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void inOrderTraverse(Node node) {
if (node == null)
return;
inOrderTraverse(node.leftChild);
System.out.print(node.data + " ");
inOrderTraverse(node.rightChild);
}

/**
* 后序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void postOrderTraverse(Node node) {
if (node == null)
return;
postOrderTraverse(node.leftChild);
postOrderTraverse(node.rightChild);
System.out.print(node.data + " ");
}

public static void main(String[] args) {
BinTreeTraverse2 binTree = new BinTreeTraverse2();
binTree.createBinTree();
// nodeList中第0个索引处的值即为根节点
Node root = nodeList.get(0);

System.out.println("先序遍历:");
preOrderTraverse(root);
System.out.println();

System.out.println("中序遍历:");
inOrderTraverse(root);
System.out.println();

System.out.println("后序遍历:");
postOrderTraverse(root);
}

}

先序遍历:
1 2 4 8 9 5 3 6 7
中序遍历:
8 4 9 2 5 1 6 3 7
后序遍历:
8 9 4 5 2 6 7 3 1

转载于:https://www.cnblogs.com/liangjq/p/3996589.html

java实现二叉树的构建以及3种遍历方法相关推荐

  1. java构建二叉树_java实现二叉树的构建以及3种遍历方法

    packagetest;importjava.util.LinkedList;importjava.util.List;/*** 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考 ...

  2. 打印完全二叉树java_java 完全二叉树的构建与四种遍历方法示例

    本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下. 有如下的一颗完全二叉树: 先序遍历结果应该为:1  2  4  5  3  6  7 中序遍历结果应该为:4  2  5  ...

  3. # 遍历结构体_关于二叉树怎样建立和四种遍历方法你知道吗?

    1. 首先我们要知道二叉树的性质是什么2. 怎样建立二叉搜索树?3. 先序遍历4. 中序遍历5. 后序遍历6. 总结上述三种遍历规律7. 层序遍历 1. 首先我们要知道二叉树的性质是什么 在二叉树上, ...

  4. Java实现二叉树的创建与四种遍历方式(前,中,后,层)

    文章目录 1.二叉树节点的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树的层序遍历

  5. 20-12-22 二叉树的构建、三种遍历、顺序二叉树原理

    二叉树: public class BinaryTree {public static void main(String[] args) {HeroNode heroNode1 = new HeroN ...

  6. 数据结构(一)——二叉树的性质与两种遍历方法

    二叉树 二叉树的存储 1. 二叉树的性质 1.1满二叉树 1.2完全二叉树 2.二叉树的存储结构 二叉树的遍历 1.深度优先遍历 1.1先序遍历 1.2中序遍历 1.3后序遍历 二叉树的存储 1. 二 ...

  7. java从1到9构建完全二叉树_Java完全二叉树的创建与四种遍历方法分析

    Java完全二叉树的创建与四种遍历方法分析 发布时间:2020-10-01 11:58:56 来源:脚本之家 阅读:87 作者:泡0沫 本文实例讲述了Java完全二叉树的创建与四种遍历方法.分享给大家 ...

  8. java获取map遍历,Map获取键值,Map的几种遍历方法总结(推荐)

    Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对. S ...

  9. java map集合遍历方法,Java的Map集合的三种遍历方法

    集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 1. package com.myTest.MapText; import java.util.Collection; i ...

最新文章

  1. linux c 遍历目录 及 目录下文件
  2. SpringBoot +RabbitMQ 做智能家居,居然如此简单!
  3. 腾讯陈妍:万物互联时代,保险业应更注重服务创新来挖掘用户需求
  4. 【万众期待】左盟主688页QT教程震撼发布!88个例程,一大波酷炫UI+项目实战案例来袭,让您久等了!!!...
  5. python简单菜单_创建一个简单的python菜单
  6. WinXp怎么开机进入Dos
  7. 嵌入式系统——文件系统
  8. Spring-MVC案例:Spitter的笔记
  9. java 从_java-从查询字符串中过滤参数(使用番石榴?...
  10. 从零开始封装windows10 1803 超详细图文分享 第三篇:程序的安装与优化
  11. Redhat 7 安装 Nginx
  12. html去除分页符,分页符怎么删除 删除分页符的两种方法
  13. 二手房数据分析预测系统
  14. Windows进行磁盘碎片化整理
  15. day3-money enhances memory consolidation-but only for boring material
  16. CLR via C#:与WinRT组件互操作
  17. 为Chrome设置代理
  18. 史上最简单的,最直接的sass的安装教程
  19. Chrome怎么导出扩展程序(插件)为crx文件
  20. CFileDialog文件对话框

热门文章

  1. 贵州发布大数据发展十方面成果
  2. 常用经典SQL语句大全完整版--详解+实例 (存)
  3. netty4.0.x源码分析—bootstrap
  4. 关于烂代码的那些事(上)
  5. 数据库连接池DBPool分析(一):简介
  6. 虚拟化:IT技术的第三次革命
  7. 俄罗斯方块新增行算法:不拘一格编程序之二
  8. freebsd php 编译 mysql sql2005_问下:Freebsd下用php连接ms sql server
  9. 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
  10. Tomcat集群+Nginx反向代理+负载均衡