前序遍历(DLR) 前序遍历也叫做先根遍历,可记做根左右。
中序遍历(LDR) 中序遍历也叫做中根遍历,可记做左根右。
后序遍历(LRD) 后序遍历也叫做后根遍历,可记做左右根。
中序遍历(LDR) 中序遍历也叫做中根遍历,可记做左根右。
后序遍历(LRD) 后序遍历也叫做后根遍历,可记做左右根。
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); } }
发表评论
-
文件上传 下载 解析 相对路径
2014-12-16 16:29 2104有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着, ... -
发送邮件
2014-10-15 11:29 667import org.apache.commons.m ... -
Enum用法
2014-08-06 10:27 811以前的时候知道enum,但 ... -
红黑树
2014-07-24 13:51 627红黑树 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的 ... -
Java中的instanceof关键字
2014-07-21 11:14 443Java中的instanceof关键字 [size=larg ... -
Comparable接口
2014-07-21 11:01 500因为在学红黑树的时候用到了Comparable接口,故此学习一 ... -
二叉查找树
2014-07-15 10:57 605二叉排序树(Binary Sort Tree)又称二叉查找树( ... -
Java中如何写代码实现无标题无边框的窗体能够用鼠标拖动改变窗口大小
2014-01-23 17:16 1561import java.awt.*; import java ... -
Swing基础
2014-01-10 10:22 421JFrame: frame = new JFrame(); ... -
游戏音效素材大全下载 - 3000首高清无损-按分类整理
2014-01-09 18:03 487因为我看到国外很多素材,但是国内不多,我希望来做好这个事情。 ... -
Swing 键盘练习
2014-01-09 17:59 592在swing界面中写一个键盘,使用前记得放置背景图片 imp ... -
JAVA的Socket的聊天器
2014-01-09 11:06 471这是刚开始学习java网络编程的时候做的一个东东,,局域网聊天 ... -
驱动打印
2013-12-27 15:16 655java驱动打印代码: PrintTest.print(pr ... -
java程序打包
2013-12-27 15:17 522打包一般分为两种,一种是B/S架构打包,一种是C/S打包,大同 ... -
读取文件夹下的所有文件
2013-12-20 13:19 474文章来源:http://www.blogjava.net/ba ... -
实现天气预报功能
2013-12-02 10:30 563import java.io.BufferedReader; ... -
JMF播放AVI格式的视频
2013-12-02 10:26 742public class Conver { publ ... -
JMF视频播放器
2013-12-02 10:24 1139import java.awt.BorderLayout; ...
相关推荐
二叉树三种遍历算法的源码背诵版 二叉树是一种常用的数据结构,在计算机科学和软件工程中应用非常广泛。二叉树的遍历是指从根节点出发,按照某种顺序访问二叉树中的所有节点。二叉树的遍历有多种方式,本文将详细...
大连理工大学数据结构上机 二叉树三种遍历,先序和中序建立二叉树,后序和中序建立二叉树,二叉搜索树查找,删除,插入
"数据结构二叉树三种遍历" 二叉树是一种基本的数据结构,它广泛应用于计算机科学和信息技术领域。二叉树的遍历是指从二叉树的根结点出发,访问树中所有结点的过程。二叉树的遍历有三种方式:先序遍历、中序遍历和...
C语言二叉树三种遍历算法及其广义表表示 VS2012编写 基于先序遍历的构造算法:输入是二叉树的先序序列,但必须在其中加入虚结点以示空指针的位置。假设虚结点输入时用’.’字符表示。 分别利用先序遍历、中序遍历、...
为了更直观地理解二叉树的遍历过程,本文将通过动画演示的形式,详细介绍前序遍历、中序遍历以及后序遍历这三种基本的遍历方法,并解释它们各自的应用场景和重要性。 首先让我们来探讨前序遍历。前序遍历是二叉树...
【先序遍历】:先访问根节点,然后先序遍历左子树,再先序遍历右子树! 【中序遍历】:中序遍历左子树,然后访问根节点,再中序遍历右子树! 【后序遍历】:后序遍历左子树,然后后序遍历右子树,再访问根节点!
本篇文章将深入探讨二叉树三种主要遍历方式(前序、中序、后序)的非递归算法实现,力求让读者能够清晰地理解和掌握这些算法,并在实践中加以应用。 **前序遍历**是二叉树遍历的一种基本形式,其遍历顺序是先访问根...
本文将详细介绍二叉树的三种基本遍历算法:前序遍历、中序遍历和后序遍历,并通过给定的代码示例进行深入解析。 ### 1. 二叉树的基本概念 二叉树是一种每个节点最多有两个子节点的树结构,这两个子节点分别被称为...
本主题主要讨论二叉树的三种遍历方法:前序遍历、中序遍历和后序遍历。 1. **前序遍历**(根-左-右): - 首先访问根节点。 - 然后递归地访问左子树。 - 最后递归地访问右子树。 2. **中序遍历**(左-根-右):...
c语言中关于二叉树的先序遍历,链表的创建
常见的二叉树遍历方法有三种:先序遍历、中序遍历和后序遍历。下面我们将讨论这三种遍历方法的非递归算法。 一、先序遍历非递归算法 先序遍历是指先访问根结点,然后访问左子树,最后访问右子树。非递归算法使用栈...
建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。
完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全...
本项目以“C语言 二叉树的三种遍历”为主题,涵盖了前序遍历、中序遍历和后序遍历的基本概念、实现方法和实际应用。 1. 前序遍历(Preorder Traversal):前序遍历的顺序是根节点 -> 左子树 -> 右子树。在C语言中,...
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
二叉树的遍历是访问树中所有结点的过程,常见的遍历方式有三种:先序遍历、中序遍历和后序遍历。在本篇文档中,我们主要关注这三种遍历的非递归实现,这对于理解和掌握二叉树的操作非常关键,特别是在考研或面试中...
常见的二叉树遍历方法有三种:先序遍历、中序遍历和后序遍历。通常我们使用递归的方式来实现这三种遍历,但递归方法在某些情况下可能会导致栈溢出或者效率较低。因此,非递归算法的实现变得很有必要,特别是在面试或...