二叉树的遍历(2)--先序遍历,中序遍历,后序遍历(非递归)

标签: 非递归 二叉树 遍历
114人阅读 评论(0) 收藏 举报
分类:
  • 先序遍历
    public static void preOrderUnRecur(Node head) {
        System.out.print("pre-order: ");
        if (head != null) {
            Stack<Node> stack = new Stack<Node>();
            stack.add(head);
            while (!stack.isEmpty()) {
                head = stack.pop();
                System.out.print(head.value + " ");
                if (head.right != null) {
                    stack.push(head.right);
                }
                if (head.left != null) {
                    stack.push(head.left);
                }
            }
        }
        System.out.println();
    } 

下面是一个应用:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

  public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> list=new ArrayList<Integer>();
            if(root==null){
                return list;
            }
            ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();//队列,先进先出
            queue.add(root);
            while(!queue.isEmpty()){
                TreeNode t=queue.poll();
                list.add(t.val);
                if(t.left!=null){
                    queue.add(t.left);
                }
                if(t.right!=null){
                    queue.add(t.right);
                }
            }

        return list;
    }

有的时候递归方法并不能很好的实现,就需要使用非递归的方法(申请一个函数栈用来存储)

待续。。。

查看评论

数据结构JAVA版2017教学视频课程

-
  • 1970年01月01日 08:00

递归、非递归、先中后序遍历二叉树(非伪代码)

  • 2012年11月07日 19:23
  • 5KB
  • 下载

二叉树的前序、中序、后序三种遍历的六种实现方式(递归、非递归)(C++)

实现语言:C++ 存储方式:链式存储 struct TreeNode{ int val; TreeNode *left; TreeNode *right; ...
  • liujiayu1015
  • liujiayu1015
  • 2016-09-14 15:26:50
  • 4057

二叉树前序、中序、后序遍历非递归写法的透彻解析

前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014-07-06 22:14:43
  • 67752

算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现

首先来看一棵二叉树: 1、前序遍历: 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树...
  • jssongwei
  • jssongwei
  • 2016-03-03 17:33:52
  • 7931

二叉树的前序、中序、后序遍历的非递归方法 python

class TreeNode: def __init__(self,value=None,leftNode=None,rightNode=None): self.value =...
  • l153097889
  • l153097889
  • 2015-09-09 09:02:00
  • 3272

【数据结构与算法】二叉树递归与非递归遍历(附完整源码)

二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但...
  • mmc_maodun
  • mmc_maodun
  • 2013-10-24 08:58:03
  • 41879

树及树的遍历(二)-----二叉树前序、中序、后序遍历非递归写法的透彻解析

递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的: ? ...
  • u010335298
  • u010335298
  • 2016-09-19 17:18:36
  • 1268

java版的二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)

java版的二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
  • xingzhemoluo
  • xingzhemoluo
  • 2014-11-07 20:23:59
  • 1635

二叉树的遍历(前序遍历、中序遍历、后序遍历)

二叉树在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作 左子树 和 右子树。树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。树和二...
  • Cheat1173010256
  • Cheat1173010256
  • 2016-10-21 16:04:19
  • 390
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 9623
    积分: 740
    排名: 6万+
    博客专栏
    文章存档