leetcode 145. Binary Tree Postorder Traversal
来源:互联网 发布:手机 dns劫持 数据网络 编辑:程序博客网 时间:2024/05/24 06:50
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?
后根遍历指:首先遍历左子树,然后遍历右子树,最后遍历访问根结点。
不许用递归了,那我就用的栈。把 某个结点的左右子树是否访问 记录下来。public List<Integer> postorderTraversal(TreeNode root) {List<Integer> list=new ArrayList<Integer>();if(root==null){return list;}Stack<TreeNodeUsed> stack=new Stack<>();stack.push(new TreeNodeUsed(root));while(!stack.isEmpty()){TreeNodeUsed nodeUsed=stack.pop();if(nodeUsed.leftUsed==true&&nodeUsed.rightUsed==true){list.add(nodeUsed.node.val);}else{nodeUsed.rightUsed=true;nodeUsed.leftUsed=true;stack.push(nodeUsed);if(nodeUsed.node.right!=null){stack.push(new TreeNodeUsed(nodeUsed.node.right));}if(nodeUsed.node.left!=null){stack.push(new TreeNodeUsed(nodeUsed.node.left));}}}return list;}class TreeNodeUsed{TreeNode node;boolean leftUsed;boolean rightUsed;public TreeNodeUsed(TreeNode n){node=n;leftUsed=false;rightUsed=false;}}有大神也用的栈,但是方法比我简洁得多:
public List<Integer> postorderTraversal(TreeNode root) {LinkedList<Integer> ans = new LinkedList<>();Stack<TreeNode> stack = new Stack<>();if (root == null) return ans;stack.push(root);while (!stack.isEmpty()) {TreeNode cur = stack.pop();ans.addFirst(cur.val);if (cur.left != null) {stack.push(cur.left);}if (cur.right != null) {stack.push(cur.right);} }return ans;}精髓在于"add first",把数字添加到链表的最前部。这样先被pop出来的node值反而会写在结果链表的后面。我们只要使栈pop出来的顺序是 根->右->左,这样出来的结果链表的顺序就自然的反向,成为 左->右->根。
阅读全文
0 0
- [LeetCode]145.Binary Tree Postorder Traversal
- [leetcode] 145.Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal LeetCode
- Leetcode 145. Binary Tree Postorder Traversal
- [LeetCode]145. Binary Tree Postorder Traversal
- Leetcode 145. Binary Tree Postorder Traversal
- leetcode 145. Binary Tree Postorder Traversal
- LeetCode 145. Binary Tree Postorder Traversal
- LeetCode-145.Binary Tree Postorder Traversal
- [leetcode] 145. Binary Tree Postorder Traversal
- LeetCode 145. Binary Tree Postorder Traversal
- leetcode 145. Binary Tree Postorder Traversal
- [LeetCode]problem 145. Binary Tree Postorder Traversal
- Leetcode 145. Binary Tree Postorder Traversal
- [LeetCode] 145. Binary Tree Postorder Traversal
- LeetCode 145. Binary Tree Postorder Traversal
- LeetCode 145. Binary Tree Postorder Traversal
- LeetCode:145. Binary Tree Postorder Traversal
- 因服务器时间不一致导致的MapRecude 任务运行失败
- 计算机网络——运输层TCP/UDP
- tf.cond()的用法
- matlab转置的问题
- [SCOI2005]扫雷
- leetcode 145. Binary Tree Postorder Traversal
- 清理不需要的Portlet
- 关于github page 建立博客访问404
- table表格布局,表头固定不动,表身超出可滑动
- 蓝创十周年庆,感恩有您陪伴
- 递归计算非波那契列的通项f(n)
- 深机笔记
- eclipse 中 angular指令在页面中显示 Undefined attribute name (ng-model)
- Effective Modern C++ Item 3