二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作。

步骤就是原数据:数组

节点化数据:定义 Node节点对象

存储节点对象:通过LinkedList保存Node节点对象

在操作过程中我们需要将当前结点和前一节点、后一节点进行关系绑定

    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);  }  }

转载于:https://www.cnblogs.com/wentaos/p/7407006.html

【数据算法】Java实现二叉树存储以及遍历相关推荐

  1. java中怎样存储遍历的数据_【数据算法】Java实现二叉树存储以及遍历

    二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作. 步骤就是原数据:数组 节点化数据:定义 Node节点对象 存储节点对象:通过Linke ...

  2. (数据结构)1.实现二叉树的各种基本运算的算法2.实现二叉树的各种遍历算法3. 由遍历序列构造二叉树4.求二叉树中的结点个数、叶子节点个数、某结点层次和二叉树宽度

    实验内容 1.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设计一个算法,计算一棵给定二叉树b中的所有单分支结点个数. 2.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设 ...

  3. 【算法笔记】二叉树之基础遍历

    基础知识 一. 二叉树的种类 二叉树主要分为满二叉树.完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.深度为k的满二叉树,有2k ...

  4. Java实现二叉树的多种遍历

    简述: 用Java实现二叉树的前序,中序,后序,层序遍历, S型层序遍历 算法简述: 前三个算法在于输出当前节点的位置, 1 前序: 在递归左右儿子之前,输出当前节点 void PreOrderPri ...

  5. Java版二叉树的前序遍历查找、中序遍历查找和后序遍历查找

    文章收藏的好句子:任何挫折,如果无法彻底击败你,那一定会使你更强. 目录 1.二叉树的节点查找 1.1 前序遍历查找 1.2 中序遍历查找 1.3 后序遍历查找 1.二叉树的节点查找  1.1 前序遍 ...

  6. (二叉树存储+递归遍历)Binary Tree Traversals

    题目: A binary tree is a finite set of vertices that is either empty or consists of a root r and two d ...

  7. java创建二叉树并递归遍历二叉树

    二叉树类代码: package binarytree;import linkqueue.LinkQueue;public class BinaryTree {class Node{public Obj ...

  8. 算法 --- [队列结构]二叉树的层次遍历

    思路 使用队列: 初始化的时候,将root, push进队列q中 循环队列q,当其中不为空时,取出第一个元素(q.shift),记为r 若r.left不为空,将r.left推进q,若r.right不为 ...

  9. 【LeetCode笔记】199. 二叉树的右视图(Java、二叉树、层序遍历)

    文章目录 题目描述 思路 & 代码 题目描述 挺简单的,直接看思路代码吧. 思路 & 代码 就是一个层序遍历,取每层的最右边结点即可 /*** Definition for a bin ...

最新文章

  1. Django源码分析3:处理请求wsgi分析与视图View
  2. VMware虚拟机上的文件如何和Windows进行共享
  3. 数字身份的一些应用和方案
  4. 解析提高PHP执行效率的50个技巧(转)
  5. ubuntu中由apt-get获得的文件包保存在哪里?
  6. java中length的用法
  7. HDU 1233 - 还是畅通工程
  8. 系统学习机器学习之神经网络(一)--MLP及局部模型,RBF综述
  9. 第二次公共考试,判断错题集
  10. 拔叉零件的加工工艺、夹具以及拉刀设计
  11. java图片转视频_java实现图片转换为视频
  12. 防火墙结构之屏蔽主机体系结构
  13. 搭建邮件系统与使用第三方邮件发送平台优劣详解
  14. Linux学习(2)---绝对路径和相对路径
  15. 全国计算机等级考试怎么分级,【海贝推荐】全国计算机等级考试分级介绍
  16. 数据通信与网络:CH10 Error Detection and Correction
  17. android开机动画不播放,android 设置activity启动退出动画 | 解决设置activity 动画不生效问题...
  18. python scrapy爬取豆瓣即将上映电影用邮件定时推送给自己
  19. 奔跑吧美少女!试试你能跑多远?
  20. 台式计算机中如何安装CPU,台式电脑硬件如何安装

热门文章

  1. 贪心算法之买卖股票的最佳时机 II
  2. 为rm命令增加回收站功能
  3. Java8 Stream 函数式接口
  4. IDEA下maven项目Plugins和Dependencies红线
  5. 深度学习保姆级入门教程 -- 论文+代码+常用工具
  6. 1053 Path of Equal Weight
  7. 浅谈积性函数求前缀和
  8. 解密PreAngel区块链布局:平台协议类项目占4成,多个项目蓄势待发
  9. 理解和使用systrace
  10. Android Hook神器——XPosed入门(登陆劫持演示)