Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},
   1
    \
     2
    /
   3
return [3,2,1].

Note: Recursive solution is trivial, could you do it iteratively?

Show Tags
Have you met this question in a real interview? Yes  No
Discuss

SOLUTION 1:

递归解法

 public List<Integer> postorderTraversal1(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
dfs(root, ret);
return ret;
} // Solution 1: rec
public void dfs(TreeNode root, List<Integer> ret) {
if (root == null) {
return;
} dfs(root.left, ret);
dfs(root.right, ret);
ret.add(root.val);
}

SOLUTION 2:

/**
     *  后序遍历迭代解法
     *  http://www.youtube.com/watch?v=hv-mJUs5mvU
     *  http://blog.csdn.net/tang_jin2015/article/details/8545457
     *  从左到右的后序 与从右到左的前序的逆序是一样的,所以就简单喽! 哈哈
     *  用另外一个栈进行翻转即可喽
     */

 // Solution 2: iterator
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
if (root == null) {
return ret;
} Stack<TreeNode> s = new Stack<TreeNode>();
Stack<Integer> out = new Stack<Integer>(); s.push(root); while (!s.isEmpty()) {
TreeNode cur = s.pop();
out.push(cur.val); if (cur.left != null) {
s.push(cur.left);
} if (cur.right != null) {
s.push(cur.right);
}
} while (!out.isEmpty()) {
ret.add(out.pop());
} return ret;
}

GITHUB:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/PostorderTraversal.java

最新文章

  1. 深入理解javascript原型和闭包(7)——原型的灵活性
  2. webapp开发之需要知道的css细节
  3. Uiautomator打包使用第三方库,报错的解决方案
  4. C语言中 指针和数组
  5. find命令基本使用一览
  6. 使用logstash收集日志的可靠性验证
  7. 招聘面试—关于Mysql的一点儿总结
  8. Forth-83 多任务解析
  9. python3 lcs 最大公共子序列
  10. mongodb3.x主从配置及备份
  11. php获取汉字拼音首字母的方法
  12. cdoj第13th校赛初赛H - Hug the princess
  13. node.js学习之post文件上传 (multer中间件)
  14. Scrapy-从数据库取出IP并判断是否可用
  15. django Form 表单 总结与小实例
  16. Android手机系统设置页面跳转
  17. IoC就是IoC,不是什么技术,与GoF一样,是一种 设计模式。
  18. thinkcmf安装教程与目录结构详解 快速上手版
  19. SVN增加文件后,文件无法自动包括在项目中的原因
  20. python开发第二十六天CMDB

热门文章

  1. 你想要的iOS 小技巧总结
  2. 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
  3. fedora下安装运行keil uVision 4 (MDK v4.7)
  4. Windows安装ElasticSearch-2.2.0
  5. asp.net页面之间传值方法详解
  6. rdlc 分页操作和分页统计
  7. talend 将hbase中数据导入到mysql中
  8. php分享三十二:php调试工具
  9. Java:集合,Arrays工具类用法
  10. vim7.4版本在windows下的配置文件及所在位置