public abstract class BSATree<T extends Comparable<T>> { protected BSTNode<T> aRoot; // 根结点 /** * 节点 * * @timestamp Mar 5, 2016 2:48:29 PM * @author smallbug * @param <E> */ protected class BSTNode<E> { E key; // 关键字(键值) BSTNode<E> left; // 左孩子 BSTNode<E> right; // 右孩子 BSTNode<E> parent; // 父结点 public BSTNode(E key, BSTNode<E> parent, BSTNode<E> left, BSTNode<E> right) { this.key = key; this.parent = parent; this.left = left; this.right = right; } public BSTNode(E key, BSATree<T>.BSTNode<E> parent) { super(); this.key = key; this.parent = parent; } } /** * 创建二叉树 * * @timestamp Mar 5, 2016 2:48:37 PM */ protected abstract void createBSTree(); /** * 记录节点 * * @timestamp Mar 5, 2016 2:49:07 PM * @param key */ private void takeNode(T key) { System.out.print(key + " "); } /** * 前序遍历 * * @timestamp Mar 5, 2016 2:48:44 PM * @param node */ private void preOrder(BSTNode<T> node) { if (node != null) { takeNode(node.key); preOrder(node.left); preOrder(node.right); } } protected void preOrder() { preOrder(aRoot); } /** * 中序遍历 * * @timestamp Mar 5, 2016 2:48:52 PM * @param node */ private void inOrder(BSTNode<T> node) { if (node != null) { inOrder(node.left); takeNode(node.key); inOrder(node.right); } } protected void inOrder() { inOrder(aRoot); } /** * 后续遍历 * * @timestamp Mar 5, 2016 2:51:19 PM * @param node */ private void postOrder(BSTNode<T> node) { if (node != null) { postOrder(node.left); postOrder(node.right); takeNode(node.key); } } protected void postOrder() { postOrder(aRoot); } }
实现:
public class BSTree extends BSATree<String> { @Override public void createBSTree() { aRoot = new BSTNode<String>("A", null); BSTNode<String> bNode = new BSTNode<String>("B", aRoot); BSTNode<String> cNode = new BSTNode<String>("C", aRoot); BSTNode<String> dNode = new BSTNode<String>("D", bNode); BSTNode<String> eNode = new BSTNode<String>("E", bNode); BSTNode<String> fNode = new BSTNode<String>("F", cNode); BSTNode<String> gNode = new BSTNode<String>("G", cNode); BSTNode<String> hNode = new BSTNode<String>("H", dNode); BSTNode<String> iNode = new BSTNode<String>("I", dNode); BSTNode<String> jNode = new BSTNode<String>("J", eNode); BSTNode<String> kNode = new BSTNode<String>("K", fNode); aRoot.left = bNode; aRoot.right = cNode; bNode.left = dNode; bNode.right = eNode; cNode.left = fNode; cNode.right = gNode; dNode.left = hNode; dNode.right = iNode; eNode.right = jNode; fNode.right = kNode; } public static void main(String[] args) { BSTree b = new BSTree(); b.createBSTree(); System.out.println("********************** 前序遍历 **********************"); b.preOrder(); System.out.println(); System.out.println("********************** 中序遍历 **********************"); b.inOrder(); System.out.println(); System.out.println("********************** 后序遍历 **********************"); b.postOrder(); System.out.println(); } }
输出:
********************** 前序遍历 ********************** A B D H I E J C F K G ********************** 中序遍历 ********************** H D I B E J A F K C G ********************** 后序遍历 ********************** H I D J E B K F G C A
前序遍历:
中序遍历:
后序遍历:
相关推荐
java编程,二叉树的中序遍历,递归实现
二叉树,一个基于Java实现的二叉树学习项目。包含二叉树生成、遍历。适用人群:计算机,电子信息工程、数学等专业的大学生学习二叉树等数据结构,作为“参考资料”使用。 二叉树,一个基于Java实现的二叉树学习项目...
完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全...
除了代码实现,课程设计文档可能包含了二叉树的概念解释、层序遍历的算法描述、以及如何使用Java语言实现这一算法的详细步骤。同时,`课程设计.doc`可能包含项目报告,详细阐述了设计目的、实现方法、遇到的问题及...
对于数据结构,二叉树的实现的了解。通过java实现,包括了建立,查找,遍历,比较的功能。
二叉树遍历是访问二叉树中所有节点的过程,通常有三种主要方法:前序遍历、中序遍历和后序遍历。这些遍历方式对于理解和操作二叉树数据结构至关重要。 1. **前序遍历**(Preorder Traversal): - 访问根节点。 -...
中序遍历是二叉树遍历的一种方法,它按照“左-根-右”的顺序访问树中的所有节点,对于理解树的性质和执行某些操作非常有用。本课程设计将详细介绍如何使用Java编程语言实现二叉树的中序遍历。 首先,我们先构建...
在计算机科学中,二叉树是一种常见的...对于实际的编程实现,你需要根据提供的代码和数据进行调整,确保逻辑正确,并遵循二叉树遍历的规则。在进行这类问题的解决时,理解和熟悉二叉树的性质以及各种遍历方法至关重要。
详细介绍了JAVA中二叉树的非递归遍历方式,三种方式都是采用栈来辅助完成,其中前序遍历采用的是先入右子节点再入左子节点的方法,这样弹出栈时左在前,右在后。中序遍历的话则是要先一直到达最左的子节点,然后才弹...
在计算机科学中,二叉树遍历是访问树中所有节点的一种基本操作,通常有三种主要的遍历方式:前序遍历、中序遍历和后序遍历。这些遍历方法在数据结构和算法领域中有着广泛的应用,特别是在编译器设计、搜索算法和数据...
主要有三种遍历方式:前序遍历、中序遍历和后序遍历。 1. 前序遍历:根节点 -> 左子树 -> 右子树 2. 中序遍历:左子树 -> 根节点 -> 右子树 3. 后序遍历:左子树 -> 右子树 -> 根节点 递归遍历是实现这三种遍历的...
java实现二叉树非递归前序中序后序遍历
后序遍历是三种基本的二叉树遍历方法之一,另外两种为前序遍历和中序遍历。后序遍历的基本思想是从根节点出发,首先遍历左子树,然后遍历右子树,最后访问根节点。 #### 二、后序遍历算法原理 **1. 递归实现** ...
二叉树遍历是一种访问二叉树所有节点的方法,通常分为三种主要类型:先序遍历、中序遍历和后序遍历。在Java编程语言中,我们可以使用递归或迭代的方式来实现这些遍历方法。 **先序遍历**(根-左-右)是最常见的遍历...
在提供的"二叉树的递归和非递归遍历"压缩包文件中,可能包含了Java源代码,演示了如何实现这两种遍历方式。通过阅读和理解这些代码,你可以更好地掌握二叉树遍历的原理和实践,这对于理解和解决涉及二叉树的算法问题...
因此,满二叉树的前序遍历、中序遍历和后序遍历均可以通过递归方式实现。 以前序遍历为例,满二叉树的前序遍历顺序为:根、左、右。 在具体实现过程中,我们可以通过构造一个满二叉树,然后进行前序遍历来获取遍历...
在Java编程中,二叉树是一种常见的数据结构,它由节点组成,每个节点都有一个值,并且可以有至多两个子节点,分别称为左子节点和右子节点。本篇文章将详细探讨如何实现二叉树的层次遍历,即按照从根节点到叶子节点的...
接下来,我们将详细探讨这三种遍历方式以及它们的实现。 1. 前序遍历(Preorder Traversal) 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。首先访问根节点,然后递归地遍历左子树,最后遍历右子树。在非递归实现...