写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse
第一种方式:数据结构书上的,使用栈大概思路。
1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈。
2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子。其实这里面有个思想
迭代和递归的本质相同之处是什么?以后会写一篇我的思考。 public class Solution {
public List<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> arry=new ArrayList<Integer>();
if(root==null) return arry; Stack<TreeNode> s=new Stack<TreeNode>(); TreeNode t=root;
while(t!=null||!s.isEmpty())
{
while(t!=null)
{
arry.add(t.val);
s.push(t);
t=t.left; } if(!s.isEmpty())
{
TreeNode tn=s.pop();
t=tn.right; } }
return arry; }
}

下面这个思路,我用的dfs的非递归方式的思想http://www.cnblogs.com/hansongjiang/p/3812908.html这篇文章说的很清楚

public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
//只能使用非递归方式,来获得List
ArrayList<Integer> arry=new ArrayList<Integer>();
Stack<TreeNode> s=new Stack<TreeNode>();
s.push(root);
while(!s.isEmpty())
{ TreeNode t=s.pop();
arry.add(t.val); if(t.left!=null) s.push(t.left);
if(t.right!=null) s.push(t.right); }
return arry; }
}

非递归实现先序遍历 java leecode 提交的更多相关文章

  1. 二叉树的先序、中序、后序和中序遍历——Java实现

    package treeTraverse; /** * 定义一个树的结点类 */ public class Node { private int data; private Node leftChil ...

  2. Binary Tree Inorder Traversal-非递归实现中序遍历二叉树

    题目描述: 给定一颗二叉树,使用非递归方法实现二叉树的中序遍历 题目来源: http://oj.leetcode.com/problems/binary-tree-inorder-traversal/ ...

  3. 后续遍历 java leecode

    以前觉得后续遍历最难写,今天看了篇博客http://blog.csdn.net/sgbfblog/article/details/7773103,其实却是我们仔细比较后续遍历和先序遍历,其实后续遍历就 ...

  4. 1058FBI<二叉树,递归,后序遍历>

    问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...

  5. Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...

  6. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  7. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  8. Java - 二叉树递归与非递归

    树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...

  9. 基于visual Studio2013解决面试题之0401非递归遍历二叉树

     题目

随机推荐

  1. 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。

    问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...

  2. ssh自动登录的4种实现方法

    ssh自动登录的几种实现方法,记录在此.  1. 自动ssh/scp方法 A为本地主机(即用于控制其他主机的机器) ; B为远程主机(即被控制的机器Server), 假如ip为192.168.60.1 ...

  3. 测试MySQL事务管理

    1.MySQL 版本 mysql> select version(); +------------+ | version() | +------------+ -log | +--------- ...

  4. 【gradle】 入门

    robin@robin-PC2 /D/JavaWorkSpace/payment/alipay-wap (master)$ ./gradlew idea

  5. MVC去掉传参时的验证:从客户端中检测到有潜在危险的Request.QueryString值

    解决方法:给Action添加属性[ValidateInput(false)]. 例: [ValidateInput(false)] public ActionResult Index(string o ...

  6. Unity3d Shader开发(三)Pass(Blending )

    混合被用于制作透明物体. 当图像被渲染时,所有着色器被执行以后,所有贴图被应用后,像素将被写到屏幕.他们是如何通过Blend命令的控制和已有的图像合并呢? Syntax 语法 Blend Off Tu ...

  7. pair work-Elevator Schedule

    编程人员:周敏轩 192 周萱 149 1 有关结对编程的思考 结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计.同一个算法.同一段代码或同一组测试.通过这次的结对编程练习我结识了 ...

  8. secondarynamenode异常

    secondarynamenode异常 -- ::, ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception ...

  9. 图片上没有line-height垂直居中

    <style> div {     width: 150px;     height: 155px;     line-height: 155px;     border: 1px sol ...

  10. BZOJ 2442: [Usaco2011 Open]修剪草坪

    Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠.然而,FJ的草坪非常脏乱,因此,FJ只能够让他的 ...