`

二叉树的三种遍历方式(java实现)

阅读更多
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 

 前序遍历:



 

 中序遍历:



 

 后序遍历:



 

 

  • 大小: 62.8 KB
  • 大小: 59.2 KB
  • 大小: 67.6 KB
0
3
分享到:
评论

相关推荐

    二叉树递归中序遍历java

    java编程,二叉树的中序遍历,递归实现

    一个基于Java实现的二叉树学习项目 包含二叉树生成、遍历

    二叉树,一个基于Java实现的二叉树学习项目。包含二叉树生成、遍历。适用人群:计算机,电子信息工程、数学等专业的大学生学习二叉树等数据结构,作为“参考资料”使用。 二叉树,一个基于Java实现的二叉树学习项目...

    C语言二叉树的三种遍历方式的实现及原理

    二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。 ...下面介绍一下,二叉树的三种遍历方式,其中每一种遍历方式都有三种实现方式。 节点定

    完全二叉树的层序遍历-labview

    完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全二叉树的层序遍历-labview完全...

    二叉树的建立,遍历 java实现

    对于数据结构,二叉树的实现的了解。通过java实现,包括了建立,查找,遍历,比较的功能。

    二叉树 层序遍历 java实现 课程设计

    除了代码实现,课程设计文档可能包含了二叉树的概念解释、层序遍历的算法描述、以及如何使用Java语言实现这一算法的详细步骤。同时,`课程设计.doc`可能包含项目报告,详细阐述了设计目的、实现方法、遇到的问题及...

    二叉树的遍历 java语言实现

    二叉树遍历是访问二叉树中所有节点的过程,通常有三种主要方法:前序遍历、中序遍历和后序遍历。这些遍历方式对于理解和操作二叉树数据结构至关重要。 1. **前序遍历**(Preorder Traversal): - 访问根节点。 -...

    根据二叉树前序遍历和中序遍历的结果输出后序遍历(java)

    在计算机科学中,二叉树是一种常见的...对于实际的编程实现,你需要根据提供的代码和数据进行调整,确保逻辑正确,并遵循二叉树遍历的规则。在进行这类问题的解决时,理解和熟悉二叉树的性质以及各种遍历方法至关重要。

    Java二叉树中序遍历

    中序遍历是二叉树遍历的一种方法,它按照“左-根-右”的顺序访问树中的所有节点,对于理解树的性质和执行某些操作非常有用。本课程设计将详细介绍如何使用Java编程语言实现二叉树的中序遍历。 首先,我们先构建...

    二叉树的后序遍历(java代码).docx

    二叉树的后序遍历(java代码).docx

    二叉树的非递归遍历方式(Java).md

    详细介绍了JAVA中二叉树的非递归遍历方式,三种方式都是采用栈来辅助完成,其中前序遍历采用的是先入右子节点再入左子节点的方法,这样弹出栈时左在前,右在后。中序遍历的话则是要先一直到达最左的子节点,然后才弹...

    二叉树的遍历-java

    在计算机科学中,二叉树遍历是访问树中所有节点的一种基本操作,通常有三种主要的遍历方式:前序遍历、中序遍历和后序遍历。这些遍历方法在数据结构和算法领域中有着广泛的应用,特别是在编译器设计、搜索算法和数据...

    JAVA实现二叉树建立、遍历

    主要有三种遍历方式:前序遍历、中序遍历和后序遍历。 1. 前序遍历:根节点 -&gt; 左子树 -&gt; 右子树 2. 中序遍历:左子树 -&gt; 根节点 -&gt; 右子树 3. 后序遍历:左子树 -&gt; 右子树 -&gt; 根节点 递归遍历是实现这三种遍历的...

    Java实现二叉树的遍历

    java实现二叉树非递归前序中序后序遍历

    遍历二叉树(java实现)

    二叉树遍历是一种访问二叉树所有节点的方法,通常分为三种主要类型:先序遍历、中序遍历和后序遍历。在Java编程语言中,我们可以使用递归或迭代的方式来实现这些遍历方法。 **先序遍历**(根-左-右)是最常见的遍历...

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

    在提供的"二叉树的递归和非递归遍历"压缩包文件中,可能包含了Java源代码,演示了如何实现这两种遍历方式。通过阅读和理解这些代码,你可以更好地掌握二叉树遍历的原理和实践,这对于理解和解决涉及二叉树的算法问题...

    Java实现二叉树的层次遍历

    在Java编程中,二叉树是一种常见的数据结构,它由节点组成,每个节点都有一个值,并且可以有至多两个子节点,分别称为左子节点和右子节点。本篇文章将详细探讨如何实现二叉树的层次遍历,即按照从根节点到叶子节点的...

    满二叉树的前序遍历C++实现

    因此,满二叉树的前序遍历、中序遍历和后序遍历均可以通过递归方式实现。 以前序遍历为例,满二叉树的前序遍历顺序为:根、左、右。 在具体实现过程中,我们可以通过构造一个满二叉树,然后进行前序遍历来获取遍历...

    二叉树的各种遍历

    接下来,我们将详细探讨这三种遍历方式以及它们的实现。 1. 前序遍历(Preorder Traversal) 前序遍历的顺序是:根节点 -&gt; 左子树 -&gt; 右子树。首先访问根节点,然后递归地遍历左子树,最后遍历右子树。在非递归实现...

Global site tag (gtag.js) - Google Analytics