LeetCode-Binary Tree Postorder Traversal
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, cocould you do it iteratively?
Source code: Java version
Algorithm Analysis: Double stack. Time complexity O (n), space complexity O (n)
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List
postorderTraversal(TreeNode root) { List
result=new ArrayList
(); Stack
stack=new Stack
(); Stack
cntStack=new Stack
(); TreeNode node=root; int label; do { while(node!=null) { stack.push(node); cntStack.push(0); node=node.left; } if(!stack.isEmpty()) { node=stack.pop(); label=cntStack.pop(); if(label==0) { cntStack.push(1); stack.push(node); node=node.right; }else { result.add(node.val); node=null; //import } } }while(!stack.isEmpty()); return result; }}
Code explanation: the cntStack is used to indicate whether the vertex is first or second out of the stack. For the first time, the stack needs to be accessed by the node, and for the second time, the stack needs to be accessed directly.