码迷,mamicode.com
首页 > 其他好文 > 详细

Binary Tree Postorder Traversal

时间:2015-10-01 06:59:04      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

Binary Tree Postorder Traversal

标签:

原文地址:http://www.cnblogs.com/ireneyanglan/p/4850619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!