LeetCode145 Binary Tree Postorder Traversal Java题解(递归 迭代)
2015-07-09 10:34
609 查看
题目:
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
return
解题:
递归的还是和前面中序和先序一样,只是交换一下顺序而已
迭代的稍微复杂一些 总体上和前面的解法是一样的 不过这边要先访问左右节点,同样还是以左节点作为主线,不过这里要增加一个栈记录每个节点的右节点是否已经被访问过,只有当左右节点都被访问的前提下才能访问根节点
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].
解题:
递归的还是和前面中序和先序一样,只是交换一下顺序而已
public static List<Integer> result=new ArrayList<Integer>(); public static List<Integer> postorderTraversal(TreeNode root) { if(root!=null) { postorderTraversal(root.right); postorderTraversal(root.left); result.add(root.val); } return result; }
迭代的稍微复杂一些 总体上和前面的解法是一样的 不过这边要先访问左右节点,同样还是以左节点作为主线,不过这里要增加一个栈记录每个节点的右节点是否已经被访问过,只有当左右节点都被访问的前提下才能访问根节点
public static List<Integer> postorderTraversal2(TreeNode root) { List<Integer> res=new ArrayList<>(); Stack<TreeNode> nodeStack=new Stack<>(); Stack<Integer> nodeState=new Stack<>();//记录右节点是否已经访问过,1表示已经访问了,0表示未访问 if(root==null) return res; else { nodeStack.push(root); nodeState.push(0); root=root.left; } while(!nodeStack.isEmpty()) { while(root!=null) { nodeStack.push(root); nodeState.push(0); root=root.left; }//当这个循环跳出的时候 说明nodeStak栈顶的那个节点没有左节点 if(nodeState.peek()==1)//如果这时候已经访问过右节点了 这时候就可以访问根节点 { res.add(nodeStack.pop().val); nodeState.pop();//把根节点对应的状态值去除 } else {//访问右节点 root=nodeStack.peek().right; nodeState.pop();//更改状态值 由0变1 nodeState.push(1); } } return res; }
相关文章推荐
- Java内部类的使用小结
- 安卓第三方动态链接库so调用,解决未对java开放的函数调用,解决类名对齐问题
- Spring+RMI集成实现远程访问分布式应用
- Java多线程的使用
- java基础入门-ZipOutputStream打包下载
- java基础入门-ZipOutputStream打包下载
- Android小提示——Android在eclipse中新建工程后没有生成默认的MainActivity和对应的布局文件
- Eclipse查看源码乱码问题
- struts.xml 文件
- 解决自定义文件上传处理与Spring MultipartResolver的冲突问题
- struts2标签
- 完整类库列表struts2.0
- [LeetCode][Java] Roman to Integer
- Eclipse开发JAVA程序
- Java设计模式之动态代理
- struts2中action接收参数的3种方法
- [LeetCode][Java] Integer to Roman
- Java 并发专题 : Timer的缺陷 用ScheduledExecutorService替代
- java经纬度换算距离,date换算字符串工具方法
- Spring MVC原理及实例基础扫盲篇