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