leetcode-java-144. Binary Tree Preorder Traversal
2016-06-29 16:46
253 查看
使用循环来解决,递归和迭代都是循环
递归:递归重复调用自身实现循环
迭代:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值
普通循环:
思路一:
使用递归 1ms
思路二:
使用迭代 2ms
题上都说了,递归简单,让我们来使用迭代吧!迭代需要借助栈来实现
前序遍历时根左右,则入栈顺序是右左根
递归:递归重复调用自身实现循环
迭代:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值
普通循环:
思路一:
使用递归 1ms
思路二:
使用迭代 2ms
题上都说了,递归简单,让我们来使用迭代吧!迭代需要借助栈来实现
前序遍历时根左右,则入栈顺序是右左根
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); if(root != null) { list.add(root.val); list.addAll(preorderTraversal(root.left)); list.addAll(preorderTraversal(root.right)); } return list; } }
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); if(root == null) { return list; } stack.push(root); while(!stack.isEmpty()) { TreeNode node = stack.pop(); list.add(node.val); if(node.right != null) { stack.push(node.right); } if(node.left != null) { stack.push(node.left); } } return list; } }
相关文章推荐
- Java - 多线程的基本原理
- Java类加载机制详解
- Java集合类性能分析
- java.lang.numberformatexception
- JavaMail SSL TLS 发送邮件
- Quartz 教程
- 编写一个封装学生信息的JavaBean对象,在jsp页面中调用该对象,并将学生信息输出到页面中。
- Java NIO与IO的区别和比较
- JavaSE 基础 第30节 包
- java 单向和双向链表的详解
- java提供的默认list排序方法-转
- 创建一个WebService服务端
- java调用phantomjs
- eclipse4.4.2使用maven
- java连接不上hive 的原因
- Java解析xml文档之DOM解析--CRUD(增删改查)
- java.lang.IllegalStateException:
- JavaSE 基础 第29节 final 关键字
- 华为机试---解密(全排列)
- java Pattern和Matcher详解