Java实现二叉树的构建与遍历
转载:http://ocaicai.iteye.com/blog/1047397
目录:
1.把一个数组的值赋值给一颗二叉树
2.具体代码
1.树的构建方法
2.具体代码
- 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/wzyxidian/p/4907922.html
Java实现二叉树的构建与遍历相关推荐
- Java树形菜单的构建、遍历以及获取树形菜单的Id集合List
项目的开发过程中经常遇到树形菜单构建,遍历的情况,于是记录一下以便查阅. 1创建一个Menu类,简单起见,这里我只使用了id和pid的字段 package com.huato.tree.menu;im ...
- java实现二叉树的构建以及3种遍历方法
目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 package tree; import java.util.LinkedList; import java.util.Li ...
- Java二叉树的构建与遍历
一.二叉排序树定义 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性 ...
- 二叉树的建立 java_如何用java实现二叉树的构建
目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 注意: 1. 父节点数组下标从0到 n/2 -1 ,但是遍历时要小于n/2-1,因为最后一个父节点可能没有右孩子,当n/2-1为奇数时才有右孩 ...
- java的二叉树及三种遍历
package com.BinTreeTraverse;import java.util.LinkedList; import java.util.List;/*** 功能:把一个数组的值存入二叉树中 ...
- java实现二叉树的后序遍历_二叉树前序中序后序遍历(Java实现)
基于对数组和链表的存储优缺点分析,这里按照需求引进了一种新的数据结构,树 它可以在增删改查上都保持高效率 创建如下图所示的二叉树,并分别使用三种顺序遍历: 代码实现: package Tree; pu ...
- java实现二叉树的非递归遍历
研究了一上午被进栈出栈搞晕了 终于弄出来了 直接上代码 package com.wyy.test;import java.util.Stack;public class TransverseTreeW ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
- Java——从前序与中序遍历序列构造二叉树
文章目录 前言 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 1.构造二叉树 2.层次遍历二叉树 三.总结 前言 算法分析--分治法 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 ...
最新文章
- Android nginx php,Android pad中有关nginx,mysql,php的集成问题汇总
- 用FDISK进行硬盘分区
- K Nearest Neighbor 算法
- 给页面字段中添加一个按钮,点击按钮实现弹窗效果
- 数学公式编辑器 linux,linux下的公式编辑器
- Spray + Akka高性能异步IO并发
- C语言运算符优先级 (备忘)
- 远程网络视频监视技术
- 点击头像上传文件的效果
- pandas如何保存在excel里面_别找了,这是 Pandas 最详细教程了
- Web页面iOS真机调试-win10
- 计算机无法连接到wifi但手机可以使用,电脑连不上wifi而手机能连怎么办
- java clh_【Java并发编程实战】—– AQS(四):CLH同步队列
- with open新创建的文件在哪找_Python 基本功: 4. 读写文件
- tapestry mysql_tapestry与mybatis模块的结合
- 3D游戏模型教程系列:3D max安装
- CLK_OF_DECLARE 解析
- 爱就是当你坐在他身边,哪怕什么都不做,也会感觉很开心
- 深度linux 挂载硬盘,Deepin 深度磁盘挂载
- 2021美赛Latex排版美化 完整代码1
热门文章
- cdrx4自动排版步骤_现在的大学生,都不会论文排版了
- php的foreach循环执行过程分析以及循环中执行unset()的一些问题
- 【Kali渗透全方位实战】使用Nmap进行端口探测-发现脆弱站点
- python二进制相加
- matlab 中all和any函数
- linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法
- python编程基础知识体系_Python 编程核心知识体系-基础|数据类型|控制流(一)...
- 小米游戏本bios_小米游戏本2019款发布:顶配i7-9750H+RTX2060+144Hz
- flash动画制作成品_flash动画制作
- 进阶学习(3.2)Factory Method Pattern 工厂方法模式