Binary Tree Postorder Traversal
2015-10-01 06:45
225 查看
Postorder: first, visit left child, then, parent, last, is to visit right child.
The postorder traversal result of above tree is {4,6,5,2,3,1}.
Key different here is that we print right child before we print parent node. Therefore, we need a mark for parent node. Only when its left child and right child are both printed, it can be printed out.
The postorder traversal result of above tree is {4,6,5,2,3,1}.
Key different here is that we print right child before we print parent node. Therefore, we need a mark for parent node. Only when its left child and right child are both printed, it can be printed out.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class MarkTreeNode { TreeNode node; int mark; MarkTreeNode(TreeNode n, int x) { node = n; mark = x; } } public class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> path = new ArrayList<Integer>(); Deque<MarkTreeNode> stack = new ArrayDeque<MarkTreeNode>(); TreeNode p = root; MarkTreeNode m = null; while (p != null || !stack.isEmpty()) { while (p != null) { m = new MarkTreeNode(p, 1); stack.push(m); p = p.left; } if (!stack.isEmpty()) { m = stack.peek(); if (m.mark == 1) { p = m.node.right; m.mark = 2; } else { // m.mark == 2 stack.pop(); path.add(m.node.val); } } } return path; } }
相关文章推荐
- 游戏震屏效果的实现
- 游戏震屏效果的实现
- K-th largest element in an array
- Android Api Demos登顶之路(八十二)Graphics-->Picture
- OSChina 周四乱弹 —— 十一精品旅游路线
- ZOJ.2540 Form a Square【水】 2015/10/01
- Android项目使用support v7时遇到的各种问题GOOD
- nf使用 Python 的 turtle 模块画图
- Peeking Iterator
- 二进制的一个常见技巧
- 写Swift用Cocoapods兼容IOS7
- Solr 4.2.0的一些知识
- PowerShell 查询操作
- PowerShell 条件判断和循环
- svg vs canvas
- Bootlaoder分析详解
- nw
- 在线Markdown Editor
- *LeetCode-Reorder List
- jsp片段