LeetCode OJ平台上Binary Tree Postorder Traversal题目用java堆栈实现
来源:互联网 发布:勇者斗恶龙8知乎 编辑:程序博客网 时间:2024/06/05 22:44
原始题目如下,意为后序遍历二叉树,不要用递归。
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?
后序遍历略微复杂,有两种方法:1,使用额外堆栈,记录节点的右孩子是否访问过;2,将“前序遍历”(中、右、左),然后逆序输出即为后序遍历。两种方法源代码如下:
import java.util.ArrayDeque;import java.util.LinkedList;import java.util.List;public class Solution {public static List<Integer> postorderTraversal(TreeNode root){ArrayDeque<TreeNode> stack = new ArrayDeque<TreeNode>();List<Integer> a = new LinkedList<Integer>();List<Integer> b = new LinkedList<Integer>();TreeNode tmp = null;if(root == null){return a;}else{stack.add(root);while(!stack.isEmpty()){tmp = stack.removeLast();a.add(tmp.val);if(tmp.left != null)stack.add(tmp.left);if(tmp.right != null)stack.add(tmp.right); }for(int i = a.size()-1 ; i >= 0; i --)b.add(a.get(i));return b;}}}
import java.util.ArrayDeque;import java.util.LinkedList;import java.util.List;public class Solution {public static List<Integer> postorderTraversal(TreeNode root){ArrayDeque<TreeNode> stack = new ArrayDeque<TreeNode>();ArrayDeque<TreeNode> flag = new ArrayDeque<TreeNode>();//Node in this stack, its right child had been visitedList<Integer> a = new LinkedList<Integer>();TreeNode tmp = null;if(root == null){return a;}else{stack.add(root);while(stack.peekLast().left != null){stack.add(stack.peekLast().left);}while(!stack.isEmpty()){if(stack.peekLast().right == null){//tmp = stack.removeLast();a.add(tmp.val);}else if(!flag.isEmpty() && stack.peekLast().equals(flag.peekLast())){// its right child had been visitedtmp = stack.removeLast();a.add(tmp.val);flag.removeLast();}else{//it has right child and the right child had not been visitedtmp = stack.peekLast();stack.add(stack.peekLast().right);flag.add(tmp);tmp = stack.peekLast();while(tmp.left != null){stack.add(tmp.left);tmp = tmp.left;}}}return a;}}public static void main(String args[]){List<Integer> c = new LinkedList<Integer>();TreeNode p = new TreeNode(1);TreeNode p2 = new TreeNode(2);TreeNode p3 = new TreeNode(3);TreeNode p4 = new TreeNode(4);TreeNode p5 = new TreeNode(5);TreeNode p6 = new TreeNode(6);TreeNode p7 = new TreeNode(7);p.left = p2;p.right = p5;p2.left = p3;p2.right = p4;p3.left = null;p3.right = null;p4.left = null;p4.right = null;p5.left = null;p5.right = null;c = postorderTraversal(p);for(int i = 0; i < c.size(); i ++ ){System.out.println(c.get(i));}}}
0 0
- LeetCode OJ平台上Binary Tree Postorder Traversal题目用java堆栈实现
- LeetCode OJ平台上Binary Tree Inorder Traversal题目使用java堆栈方式实现
- Leetcode OJ平台上的Binary Tree Preorder Traversal题目用java ArrayDeque实现
- LeetCode OJ:Binary Tree Postorder Traversal
- LeetCode OJ: Binary Tree Postorder Traversal
- LeetCode OJ - Binary Tree Postorder Traversal
- [LeetCode OJ]Binary Tree Postorder Traversal
- LeetCode OJ Binary Tree Postorder Traversal
- leetcode题目:Binary Tree Postorder Traversal
- [Leetcode] Binary Tree Postorder Traversal (Java)
- LeetCode 154 -Binary Tree Postorder Traversal ( JAVA )
- LeetCode OJ:Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode OJ --问题与解答 Binary Tree Postorder Traversal
- leetcode OJ -Binary Tree Postorder Traversal(2014.1.20)
- [LeetCode OJ] Binary Tree Postorder Traversal 解题报告
- LeetCode OJ Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- windows进程间通信系列 第二篇 内存映射文件
- 用Editplus配置JAVA编辑环境
- cdecl、stdcall、fastcall函数调用约定区别
- NSDate日期比较
- C语言的存储区
- LeetCode OJ平台上Binary Tree Postorder Traversal题目用java堆栈实现
- (实用)简单的百度各平台分享代码
- editplus+mingw搭建C++开发环境
- VC++6.0在重载操作符时时定义为友元,报错fatal error C1001: INTERNAL COMPILER ERROR解决方案
- Matlab中的一些小技巧
- Google Maps Android API V2使用及问题解决
- Linux if表达式出现unexpected operator
- 编译ffmpeg的过程
- Git使用简单总结