转载:http://ocaicai.iteye.com/blog/1047397

目录:

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

2.具体代码

1.树的构建方法

2.具体代码

Java代码  
  1. package tree;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. /**
  5. * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历
  6. *
  7. * 参考资料0:数据结构(C语言版)严蔚敏
  8. *
  9. * 参考资料1:http://zhidao.baidu.com/question/81938912.html
  10. *
  11. * 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java
  12. *
  13. * @author ocaicai@yeah.net @date: 2011-5-17
  14. *
  15. */
  16. public class BinTreeTraverse2 {
  17. private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  18. private static List<Node> nodeList = null;
  19. /**
  20. * 内部类:节点
  21. *
  22. * @author ocaicai@yeah.net @date: 2011-5-17
  23. *
  24. */
  25. private static class Node {
  26. Node leftChild;
  27. Node rightChild;
  28. int data;
  29. Node(int newData) {
  30. leftChild = null;
  31. rightChild = null;
  32. data = newData;
  33. }
  34. }
  35. public void createBinTree() {
  36. nodeList = new LinkedList<Node>();
  37. // 将一个数组的值依次转换为Node节点
  38. for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
  39. nodeList.add(new Node(array[nodeIndex]));
  40. }
  41. // 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树
  42. for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
  43. // 左孩子
  44. nodeList.get(parentIndex).leftChild = nodeList
  45. .get(parentIndex * 2 + 1);
  46. // 右孩子
  47. nodeList.get(parentIndex).rightChild = nodeList
  48. .get(parentIndex * 2 + 2);
  49. }
  50. // 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
  51. int lastParentIndex = array.length / 2 - 1;
  52. // 左孩子
  53. nodeList.get(lastParentIndex).leftChild = nodeList
  54. .get(lastParentIndex * 2 + 1);
  55. // 右孩子,如果数组的长度为奇数才建立右孩子
  56. if (array.length % 2 == 1) {
  57. nodeList.get(lastParentIndex).rightChild = nodeList
  58. .get(lastParentIndex * 2 + 2);
  59. }
  60. }
  61. /**
  62. * 先序遍历
  63. *
  64. * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
  65. *
  66. * @param node
  67. *            遍历的节点
  68. */
  69. public static void preOrderTraverse(Node node) {
  70. if (node == null)
  71. return;
  72. System.out.print(node.data + " ");
  73. preOrderTraverse(node.leftChild);
  74. preOrderTraverse(node.rightChild);
  75. }
  76. /**
  77. * 中序遍历
  78. *
  79. * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
  80. *
  81. * @param node
  82. *            遍历的节点
  83. */
  84. public static void inOrderTraverse(Node node) {
  85. if (node == null)
  86. return;
  87. inOrderTraverse(node.leftChild);
  88. System.out.print(node.data + " ");
  89. inOrderTraverse(node.rightChild);
  90. }
  91. /**
  92. * 后序遍历
  93. *
  94. * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
  95. *
  96. * @param node
  97. *            遍历的节点
  98. */
  99. public static void postOrderTraverse(Node node) {
  100. if (node == null)
  101. return;
  102. postOrderTraverse(node.leftChild);
  103. postOrderTraverse(node.rightChild);
  104. System.out.print(node.data + " ");
  105. }
  106. public static void main(String[] args) {
  107. BinTreeTraverse2 binTree = new BinTreeTraverse2();
  108. binTree.createBinTree();
  109. // nodeList中第0个索引处的值即为根节点
  110. Node root = nodeList.get(0);
  111. System.out.println("先序遍历:");
  112. preOrderTraverse(root);
  113. System.out.println();
  114. System.out.println("中序遍历:");
  115. inOrderTraverse(root);
  116. System.out.println();
  117. System.out.println("后序遍历:");
  118. postOrderTraverse(root);
  119. }
  120. }

输出结果:

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

转载于:https://www.cnblogs.com/wzyxidian/p/4907922.html

Java实现二叉树的构建与遍历相关推荐

  1. Java树形菜单的构建、遍历以及获取树形菜单的Id集合List

    项目的开发过程中经常遇到树形菜单构建,遍历的情况,于是记录一下以便查阅. 1创建一个Menu类,简单起见,这里我只使用了id和pid的字段 package com.huato.tree.menu;im ...

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

    目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 package tree; import java.util.LinkedList; import java.util.Li ...

  3. Java二叉树的构建与遍历

    一.二叉排序树定义 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性 ...

  4. 二叉树的建立 java_如何用java实现二叉树的构建

    目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 注意: 1. 父节点数组下标从0到 n/2 -1 ,但是遍历时要小于n/2-1,因为最后一个父节点可能没有右孩子,当n/2-1为奇数时才有右孩 ...

  5. java的二叉树及三种遍历

    package com.BinTreeTraverse;import java.util.LinkedList; import java.util.List;/*** 功能:把一个数组的值存入二叉树中 ...

  6. java实现二叉树的后序遍历_二叉树前序中序后序遍历(Java实现)

    基于对数组和链表的存储优缺点分析,这里按照需求引进了一种新的数据结构,树 它可以在增删改查上都保持高效率 创建如下图所示的二叉树,并分别使用三种顺序遍历: 代码实现: package Tree; pu ...

  7. java实现二叉树的非递归遍历

    研究了一上午被进栈出栈搞晕了 终于弄出来了 直接上代码 package com.wyy.test;import java.util.Stack;public class TransverseTreeW ...

  8. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  9. Java——从前序与中序遍历序列构造二叉树

    文章目录 前言 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 1.构造二叉树 2.层次遍历二叉树 三.总结 前言 算法分析--分治法 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 ...

最新文章

  1. Android nginx php,Android pad中有关nginx,mysql,php的集成问题汇总
  2. 用FDISK进行硬盘分区
  3. K Nearest Neighbor 算法
  4. 给页面字段中添加一个按钮,点击按钮实现弹窗效果
  5. 数学公式编辑器 linux,linux下的公式编辑器
  6. Spray + Akka高性能异步IO并发
  7. C语言运算符优先级 (备忘)
  8. 远程网络视频监视技术
  9. 点击头像上传文件的效果
  10. pandas如何保存在excel里面_别找了,这是 Pandas 最详细教程了
  11. Web页面iOS真机调试-win10
  12. 计算机无法连接到wifi但手机可以使用,电脑连不上wifi而手机能连怎么办
  13. java clh_【Java并发编程实战】—– AQS(四):CLH同步队列
  14. with open新创建的文件在哪找_Python 基本功: 4. 读写文件
  15. tapestry mysql_tapestry与mybatis模块的结合
  16. 3D游戏模型教程系列:3D max安装
  17. CLK_OF_DECLARE 解析
  18. 爱就是当你坐在他身边,哪怕什么都不做,也会感觉很开心
  19. 深度linux 挂载硬盘,Deepin 深度磁盘挂载
  20. 2021美赛Latex排版美化 完整代码1

热门文章

  1. cdrx4自动排版步骤_现在的大学生,都不会论文排版了
  2. php的foreach循环执行过程分析以及循环中执行unset()的一些问题
  3. 【Kali渗透全方位实战】使用Nmap进行端口探测-发现脆弱站点
  4. python二进制相加
  5. matlab 中all和any函数
  6. linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法
  7. python编程基础知识体系_Python 编程核心知识体系-基础|数据类型|控制流(一)...
  8. 小米游戏本bios_小米游戏本2019款发布:顶配i7-9750H+RTX2060+144Hz
  9. flash动画制作成品_flash动画制作
  10. 进阶学习(3.2)Factory Method Pattern 工厂方法模式