`
liu0107613
  • 浏览: 74084 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

树的遍历

阅读更多

package dataStucture;


/**
 * 树的节点类。这里是简单创建一个二叉树
 * @author lxt
 *
 */
public class BitTree {
 
 int data;
 
 /**
  *左树指针
  */
 BitTree lchild;
 /**
  * 右树指针
  */
 BitTree rchild;
 
 
 public BitTree(int data) {
  super();
  this.data = data;
 }

 /**
  * 先序遍历,访问根,再先序遍历左子树,先序遍历右子树
  * @param root
  */
 public static void preOrder(BitTree root){
  
  if(root==null) return ;
  else {
   System.out.printf("%7d",root.data);
   preOrder(root.lchild);
   preOrder(root.rchild);
  }
   
 }
 
 /**
  * 二叉树的中序遍历,先中序遍历左子树,再访问根,再中序遍历右子树
  * @param root
  */
 public static void inOrder(BitTree root){
  if(root==null) return ;
  else {
   inOrder(root.lchild);
   System.out.printf("%7d",root.data);
   inOrder(root.rchild);
  }
 }
 /**
  * 后序遍历。
  *  先后序遍历左子树,后序遍历右子树,最后访问根节点。
  * @param root
  */
 public static void postOrder(BitTree root){
  if(root==null) return ;
  else {
   inOrder(root.lchild);
   System.out.printf("%7d",root.data);
   inOrder(root.rchild);
  }
  
 } 
}

 

 

package dataStucture;


/**
 * 树的节点类。这里是简单创建一个二叉树
 * @author lxt
 *
 */
public class TestBitTree {
 
 public static void main(String[] args) {
  
  BitTree root=new BitTree(1);
     root.lchild=new BitTree(2);
  root.rchild=new BitTree(3);
  root.lchild.lchild=new BitTree(4);
  root.lchild.rchild=new BitTree(5);
  root.rchild.lchild=new BitTree(6);
  root.rchild.rchild=new BitTree(7);
  
  BitTree.preOrder(root);
  System.out.println();
  BitTree.inOrder(root);
  System.out.println();
  BitTree.postOrder(root);
  
  
 
 }
}

 

 

分享到:
评论
3 楼 Heart.X.Raid 2010-05-10  
//非递归后序遍历二叉树
void aftorder_traverser_nonrec(BiTree root){

   TreeNode *p,*q;
   p=q=root;
   //指针栈,用于存储树中的结点地址
   TreeNode *stack[100];
   //栈顶位置
   int top=0;

   while(top>-1){
        //堆栈所有可能的左孩子,直到没有左孩子或左或右孩子已经输出
        while(p->lchild!=NULL&&q!=p->lchild&&q!=p->rchild){
             stack[top++]=p;
             p=p->lchild;
        }
        //当前结点没有右孩子或右孩子已经输出完毕
        if(p->rchild==NULL||q==p->rchild){
             visit(p); //输出结点
             if(top==0) --top;//说明栈中的结点全部处理完
             else{
                  q=p;
                  p=stack[--top];
             }
        }else{//向右孩子前进一步
            stack[top++]=p
            p=p->rchild;
        }
   }
}


程序没有编译,随手写了一下,应该没有逻辑错误
2 楼 yysolo 2009-08-26  
 50     def left?()
 51         @left != nil
 52     end
 53     def right?()
 54         @right != nil
 55     end
 56     def is_left?(parent)
 57         self == parent.left
 58     end
 59     def is_right?(parent)
 60         self == parent.right
 61     end

127     def visit_post()
128         stack = []
129         node = self
130         while true
131             while node.left?
132                 stack.push(node)
133                 node = node.left
134             end
135             if node.right?
136                 stack.push(node)
137                 node = node.right
138             else
139                 while not stack.empty?
140                     yield node
141                     last = stack.last()
142                     if not last.right? or node.is_right?(last)
143                         node = stack.pop()
144                     else
145                         node = last.right
146                         break
147                     end
148                 end
149                 if stack.empty?
150                     yield node
151                     break
152                 end
153             end
154         end
155     end
1 楼 wantdrink 2009-08-18  
期待楼主放出后序遍历的非递归

相关推荐

    三叉树多叉树遍历

    三叉树多叉树遍历 c# 2.0

    基于Python的多叉树遍历算法.zip

    本资料包"基于Python的多叉树遍历算法.zip"主要探讨如何在Python中实现多叉树的遍历算法。下面我们将详细讨论多叉树的概念、遍历方法以及如何用Python来实现这些算法。 一、多叉树的基本概念 多叉树是由节点和边...

    文件树遍历程序myfind

    实现文件树遍历程序myfind,参照UNIX环境高级编程中的例子

    数据结构 树 哈夫曼树 遍历算法

    建立一棵二叉链表树,分别输出此先根、中根和后根遍历序列 将上题编程,实现哈夫曼树的构建和哈夫曼编码的设计

    VFP中TREE树遍历

    VFP中TREE树遍历 无限制目录树

    CTreeCtrl目录树遍历

    总之,`CTreeCtrl`的目录树遍历是Windows编程中的常见任务,它可以通过循环或递归方式实现。循环遍历简单直观,适用于对所有节点执行相同操作;而递归遍历则更加灵活,能适应更复杂的逻辑。在实际开发中,应根据需求...

    遍历目录树 遍历目录树 遍历目录树 遍历目录树

    在C++编程中,遍历目录树是一项常见的任务,它涉及到访问和处理文件系统中的文件和子目录。这个过程通常用于文件操作、备份、搜索、清理等场景。下面我们将详细探讨如何在C++中实现这一功能。 遍历目录树的核心在于...

    多叉树的遍历,可以打印出树形结构,也可以只打印叶节点,或打印指定层的节点(一位德国教授写的)

    ### 多叉树遍历与结构解析 #### 概述 多叉树作为一种重要的数据结构,在计算机科学领域有着广泛的应用。本文将详细介绍一种基于C++实现的多叉树容器类`tree.hh`,该库由Kasper Peeters开发,并遵循GNU通用公共许可...

    MFC 目录树遍历程序

    通过以上步骤,我们可以构建出一个功能完备的MFC目录树遍历程序。实际开发中,可能还需要考虑性能优化,例如异步遍历目录,以及增加用户界面交互性,如右键菜单、搜索功能等。 在提供的"DirWalk"压缩包中,可能包含...

    图像数据结构图遍历算法四叉树

    四叉树遍历是理解和操作四叉树的核心技术之一。遍历通常指的是按照某种顺序访问树的所有节点。在四叉树中,有几种常见的遍历方法,包括前序遍历(先访问根节点,再遍历子节点)、中序遍历(对于二叉树常用,但四叉树...

    树遍历.cpp

    树遍历.cpp

    多叉树 遍历

    在IT领域,多叉树是一种数据结构,它...总之,多叉树遍历是理解和操作这种数据结构的关键。通过掌握不同类型的遍历方法,我们可以有效地在多种IT场景中利用多叉树解决问题,无论是数据处理、搜索算法还是其他复杂任务。

    java多叉树的实现和遍历输出

    本篇文章将深入探讨如何在Java中实现多叉树以及其遍历方法。 首先,我们需要定义一个多叉树节点类。这个类通常包含一个数据字段来存储节点值,以及一个ArrayList或LinkedList等动态数组来存储子节点。以下是一个...

    二叉链树遍历(递归) C++

    C++用递归算法实现二叉树的前序、中序、后序遍历,用队列实现层次遍历

    deepdash:eachDeep,filterDeep,findDeep,someDeep,omitDeep,pickDeep,keysDeep等。以UnderscoreLodash方式编写的树遍历库

    以Underscore / Lodash方式编写的树遍历库。 独立或作为Lodash mixin扩展 安装 在浏览器中 在Lodash之后加载,然后将lodash实例传递给deepdash函数: < script src =" ...

    树的遍历试验

    在计算机科学中,树是一种非常重要的数据结构,用于表示数据之间的层次关系。树的遍历是研究树结构的关键部分,因为它...这些算法展示了递归在解决树形结构问题中的强大能力,同时强调了理解和熟练掌握树遍历的重要性。

    树的遍历 c++ 编写

    在实际编程中,树遍历常用于文件系统的目录操作、编译器的语法分析、图的深度优先搜索(DFS)等场景。`graph`这个文件名可能包含了与图遍历相关的代码,因为图的深度优先搜索也可以看作是对树的一种遍历,尤其是在...

    数据结构课程设计——树的遍历

    例如,在编译器设计中,语法分析阶段会用到树遍历;在文件系统中,目录结构的遍历帮助用户查找和管理文件;在数据库索引中,B树或B+树的遍历可以快速定位数据。 在“树的遍历”这个项目中,学生可能会学习如何使用...

    人工智能-项目实践-python-顺序表、链表、栈、队列、树、Hashmap等数据结构;排序、二分法查找、树遍历等常见算法实现

    排序、二分法查找、树遍历等常见算法实现python语言实现 常见数据结构 顺序表 Python中的list和tuple两种类型采用了顺序表的实现技术 链表 单向链表 双向链表 单向循环链表 栈 队列 FIFO队列 LIFO队列 优先队列...

Global site tag (gtag.js) - Google Analytics