Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
Given binary tree
{1,#,2,3}, 1
\
2
/
3
return
[3,2,1].
Analysis:
The most difficult one among preorder, inorder and postorder traversals. The difficulty lays in that after going down to left it will go right, storing the parent node is a problem. Use one more stack to assist push nodes in reserve order of postorder to the final stack.
Steps:
1.Push the root node to the temp stack.
2.Pop node c from temp stack.
3.If c has left child push it to final stack.If c has right child push it to final stack.
4.Push c to final stack.
5.Repeat 2-4 until temp stack is empty.
6.Print final stack.
The most difficult one among preorder, inorder and postorder traversals. The difficulty lays in that after going down to left it will go right, storing the parent node is a problem. Use one more stack to assist push nodes in reserve order of postorder to the final stack.
Steps:
1.Push the root node to the temp stack.
2.Pop node c from temp stack.
3.If c has left child push it to final stack.If c has right child push it to final stack.
4.Push c to final stack.
5.Repeat 2-4 until temp stack is empty.
6.Print final stack.
Solution:
1: /**
2: * Definition for binary tree
3: * public class TreeNode {
4: * int val;
5: * TreeNode left;
6: * TreeNode right;
7: * TreeNode(int x) { val = x; }
8: * }
9: */
10: public class Solution {
11: public ArrayList<Integer> postorderTraversal(TreeNode root) {
12: ArrayList<Integer> result=new ArrayList<Integer>();
13: if(root==null)
14: return result;
15: Stack<TreeNode> t=new Stack<TreeNode>();//temp stack
16: Stack<TreeNode> r=new Stack<TreeNode>();//result stack
17: t.push(root);
18: while(!t.isEmpty())
19: {
20: TreeNode current=t.pop();
21: if(current.left!=null) t.push(current.left);
22: if(current.right!=null) t.push(current.right);
23: r.push(current);
24: }
25: while(!r.isEmpty())
26: {
27: TreeNode current=r.pop();
28: result.add(current.val);
29: }
30: return result;
31: }
32: }
没有评论:
发表评论