`

数据结构与算法——二叉树遍历

阅读更多

首先定义一个二叉树结构如下

 

class BNode{
	private String name;
	private BNode left,right;
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public BNode getLeft() {
		return left;
	}

	public void setLeft(BNode left) {
		this.left = left;
	}

	public BNode getRight() {
		return right;
	}

	public void setRight(BNode right) {
		this.right = right;
	}

	public BNode(String name)
	{
		this(name,null,null);
	}
	
	public BNode(String name,BNode left,BNode right){
		this.name = name;
		this.left = left;
		this.right = right;
	}
}

 插入一堆节点

 

BNode root;
		
root = new BNode("贾母");
root.setLeft(new BNode("贾政"));
root.setRight(new BNode("贾赦"));
root.getLeft().setLeft(new BNode("贾元春"));
root.getLeft().setRight(new BNode("贾宝玉"));
root.getRight().setLeft(new BNode("贾琏"));
root.getRight().setRight(new BNode("王熙凤"));

 下面是简单的前序遍历,中序遍历,后序遍历

 

	protected static void preOrder(BNode n)
	{
		if(n!=null){
			System.out.println(n.getName());
			preOrder(n.getLeft());
			preOrder(n.getRight());
		}
	}
	protected static void inOrder(BNode n)
	{
		if(n!=null){
			inOrder(n.getLeft());
			System.out.println(n.getName());
			inOrder(n.getRight());
		}
	}
	protected static void postOrder(BNode n)
	{
		if(n!=null){
			postOrder(n.getLeft());
			postOrder(n.getRight());
			System.out.println(n.getName());
		}
	}

 下面是广度优先遍历

 

	protected static void wideOrder(BNode n)
	{
		LinkedList l = new LinkedList();
		if(n!= null){
			l.push(n);
		}
		
		while(!l.isEmpty()){
			BNode t = (BNode)l.removeLast();
			System.out.println(t.getName());
			
			if(t.getLeft()!=null){
				l.push(t.getLeft());
			}
			if(t.getRight()!=null){
				l.push(t.getRight());
			}
		}
	}

1,首先将根节点放到队列中;

2,不断循环取队列尾,如果能取到节点,进行步骤3,否则退出循环;

3,依次将该节点的左右子节点插入队列头

下面是非递归先序遍历二叉树的一种实现,用到Stack这种数据结构,注意压栈时先右子节点后左子节点

 

	protected static void preOrder(BNode n)
	{
		Stack s = new Stack();
		
		if(n!=null){
			s.push(n);
		}		
		
		while(!s.isEmpty())
		{
			n = (BNode)s.pop();
			System.out.println(n.getName());
			if(n.getRight() != null){
				s.push(n.getRight());
			}
			if(n.getLeft()!=null){
				s.push(n.getLeft());
			}
		}
	}
分享到:
评论

相关推荐

    数据结构与算法——二叉树的建立与遍历

    完成二叉树的建立然后分别先序中序后序遍历二叉树并算出二叉树的高度和叶节点的个数

    数据结构实验——二叉树的建立和遍历.zip

    1.采用二叉链表作为存储结构,创建一棵二叉树; 2.用递归及非递归算法对二叉树实现先序遍历; 3.用递归及非递归算法对二叉树实现中序遍历; 4.用递归及非递归算法对二叉树实现后序遍历。 5.用递归遍历算法中的访问...

    数据结构实验报告——二叉树

    ### 数据结构实验报告——二叉树 #### 实验概述与目的 本次实验的主题是围绕“二叉树”这一核心概念展开。二叉树作为一种重要的非线性数据结构,在计算机科学中有着广泛的应用,例如在搜索算法、排序算法、编译器...

    数据结构上机实验——遍历二叉树

    数据结构上机实验——遍历二叉树 在计算机科学中,二叉树是一种重要的数据结构,遍历二叉树是指按某种次序访问二叉树中的结点,使每个结点访问一次且仅访问一次。本文将详细介绍二叉树的遍历算法,包括先序、中序、...

    数据结构——二叉树的生成与遍历

    数据结构,实现二叉树的生成与遍历的算法。包含利用先序、中序、后序遍历二叉树算法,二叉树基本操作。(注意没有左子树或右子树时用@或#作为结束符号)

    数据结构实验报告6-树-二叉树的遍历算法-实验内容及要求.docx

    根据给定文件的信息,我们可以详细地探讨一下关于二叉树的遍历算法这一主题,包括实验的目的、数据结构的设计、算法的设计以及输入/输出的设计等内容。 ### 实验目的 本次实验的主要目的是让学生深入理解并掌握...

    数据结构与算法——C++版(第3版)源文件

    在《数据结构与算法——C++版(第3版)》中,作者深入浅出地介绍了这些核心概念,并提供了源代码以供学习和实践。 本书可能涵盖了以下几个重要的知识领域: 1. **基础数据结构**:首先,书中会介绍基本的数据结构,...

    探秘二叉树:揭开遍历技巧的神秘面纱【数据结构与算法课程设计】

    探索二叉树遍历的奥秘,通过这篇资源你将了解二叉树遍历的基本概念、算法实现以及实际应用。无论你是计算机科学的新手还是有经验的开发者,本资源都将为你提供深入的理解和实用的技巧。 基础知识:详细讲解二叉树的...

    数据结构——二叉树的四种遍历

    在计算机科学中,数据结构是组织和存储数据的方式,它直接影响到算法的效率。二叉树作为数据结构的一种,是程序设计中常见的基础概念。本文将深入探讨二叉树的四种遍历方法,这对于理解数据结构和算法至关重要,特别...

    数据结构 二叉树三种遍历的非递归算法(背诵版).doc

    本资料“数据结构 二叉树三种遍历的非递归算法(背诵版)”着重介绍了二叉树的三种主要遍历方法——前序遍历、中序遍历和后序遍历的非递归实现。 **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。非...

    数据结构实验——二叉树

    以二叉链表作存储结构,试编写前序、中序、后序遍历二叉树的算法。

    数据结构与算法——C++版

    学习《数据结构与算法——C++版》这本书,不仅可以深入理解数据结构和算法的原理,还能掌握如何在C++环境中高效地实现它们,这对于提升编程技能和解决实际问题具有重要意义。通过阅读书中的例子和练习,你可以更好地...

    数据结构实验2.2:二叉树遍历的一些应用.doc

    在本实验报告中,我们探讨了数据结构中的一个重要概念——二叉树及其遍历方法的应用。二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树在计算机科学中有着广泛的应用...

    二叉树遍历的非递归算法分析与实现

    ### 二叉树遍历的非递归算法分析与实现 #### 一、引言 在数据结构领域中,二叉树作为一种基本的数据组织形式,其应用极为广泛。对于二叉树的操作,其中最重要的就是遍历操作。遍历是指按照特定顺序访问二叉树的...

    树 哈弗曼算法。二叉树遍历的应用。矩阵的相乘

    接着,二叉树遍历是另一项重要的数据结构操作。二叉树有三种主要的遍历方式:前序遍历(先根后子)、中序遍历(先左后根后右)和后序遍历(先左后右后根)。这些遍历方法在解决各种问题时非常有用,例如表达式树的求...

    数据结构课程设计——二叉树

    总之,这个课程设计涵盖了二叉树的基本操作,通过实际编程加深了对二叉树数据结构、递归算法以及程序设计原则的理解。完成这样的设计有助于提升分析问题、解决问题的能力,同时巩固了C语言的编程技巧。

    实用《数据结构》编程——二叉树的建立、中序遍历非递归C程序.pdf

    从给定文件的信息来看,文档主要涉及《数据结构》课程中的二叉树概念、建立、遍历以及相关C语言实现。以下是对文档中知识点的详细解释: ### 数据结构基础 - **数据结构的概念**: 数据结构是计算机存储、组织数据...

    二叉树遍历——前中后序

    二叉树遍历是计算机科学中一种重要的数据结构操作,主要应用于树形数据结构的处理。在本主题中,我们将深入探讨前序遍历、中序遍历和后序遍历这三种基本的二叉树遍历方法。这些方法对于理解和操作二叉树至关重要,...

Global site tag (gtag.js) - Google Analytics