Binary Tree Postorder Traversal

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.

复制代码
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 
11 class MarkTreeNode {
12     TreeNode node;
13     int mark;
14     MarkTreeNode(TreeNode n, int x) { node = n; mark = x; }
15 } 
16 
17 public class Solution {
18     public List<Integer> postorderTraversal(TreeNode root) {
19         List<Integer> path = new ArrayList<Integer>();
20         Deque<MarkTreeNode> stack = new ArrayDeque<MarkTreeNode>();
21         TreeNode p = root;
22         MarkTreeNode m = null;
23         while (p != null || !stack.isEmpty()) {
24             while (p != null) {
25                 m = new MarkTreeNode(p, 1);
26                 stack.push(m);
27                 p = p.left;
28             }
29             if (!stack.isEmpty()) {
30                 m = stack.peek();
31                 if (m.mark == 1) {
32                     p = m.node.right;
33                     m.mark = 2;
34                 } else { // m.mark == 2
35                     stack.pop();
36                     path.add(m.node.val);
37                 }
38             }
39         }
40         return path;
41     }
42 }
复制代码

 

posted @   树獭君  阅读(146)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示