您的位置:首页 > 其它

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.

/**
* 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: