【数据算法】Java实现二叉树存储以及遍历
二叉树在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实现二叉树存储以及遍历相关推荐
- java中怎样存储遍历的数据_【数据算法】Java实现二叉树存储以及遍历
二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作. 步骤就是原数据:数组 节点化数据:定义 Node节点对象 存储节点对象:通过Linke ...
- (数据结构)1.实现二叉树的各种基本运算的算法2.实现二叉树的各种遍历算法3. 由遍历序列构造二叉树4.求二叉树中的结点个数、叶子节点个数、某结点层次和二叉树宽度
实验内容 1.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设计一个算法,计算一棵给定二叉树b中的所有单分支结点个数. 2.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设 ...
- 【算法笔记】二叉树之基础遍历
基础知识 一. 二叉树的种类 二叉树主要分为满二叉树.完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.深度为k的满二叉树,有2k ...
- Java实现二叉树的多种遍历
简述: 用Java实现二叉树的前序,中序,后序,层序遍历, S型层序遍历 算法简述: 前三个算法在于输出当前节点的位置, 1 前序: 在递归左右儿子之前,输出当前节点 void PreOrderPri ...
- Java版二叉树的前序遍历查找、中序遍历查找和后序遍历查找
文章收藏的好句子:任何挫折,如果无法彻底击败你,那一定会使你更强. 目录 1.二叉树的节点查找 1.1 前序遍历查找 1.2 中序遍历查找 1.3 后序遍历查找 1.二叉树的节点查找 1.1 前序遍 ...
- (二叉树存储+递归遍历)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 ...
- java创建二叉树并递归遍历二叉树
二叉树类代码: package binarytree;import linkqueue.LinkQueue;public class BinaryTree {class Node{public Obj ...
- 算法 --- [队列结构]二叉树的层次遍历
思路 使用队列: 初始化的时候,将root, push进队列q中 循环队列q,当其中不为空时,取出第一个元素(q.shift),记为r 若r.left不为空,将r.left推进q,若r.right不为 ...
- 【LeetCode笔记】199. 二叉树的右视图(Java、二叉树、层序遍历)
文章目录 题目描述 思路 & 代码 题目描述 挺简单的,直接看思路代码吧. 思路 & 代码 就是一个层序遍历,取每层的最右边结点即可 /*** Definition for a bin ...
最新文章
- Django源码分析3:处理请求wsgi分析与视图View
- VMware虚拟机上的文件如何和Windows进行共享
- 数字身份的一些应用和方案
- 解析提高PHP执行效率的50个技巧(转)
- ubuntu中由apt-get获得的文件包保存在哪里?
- java中length的用法
- HDU 1233 - 还是畅通工程
- 系统学习机器学习之神经网络(一)--MLP及局部模型,RBF综述
- 第二次公共考试,判断错题集
- 拔叉零件的加工工艺、夹具以及拉刀设计
- java图片转视频_java实现图片转换为视频
- 防火墙结构之屏蔽主机体系结构
- 搭建邮件系统与使用第三方邮件发送平台优劣详解
- Linux学习(2)---绝对路径和相对路径
- 全国计算机等级考试怎么分级,【海贝推荐】全国计算机等级考试分级介绍
- 数据通信与网络:CH10 Error Detection and Correction
- android开机动画不播放,android 设置activity启动退出动画 | 解决设置activity 动画不生效问题...
- python scrapy爬取豆瓣即将上映电影用邮件定时推送给自己
- 奔跑吧美少女!试试你能跑多远?
- 台式计算机中如何安装CPU,台式电脑硬件如何安装