The question is described as follows:
Given a binary tree, return the preorder traversal of its nodes 'values.
For example:
Given binary tree{1,#,2,3}
,
1 \ 2 / 3
Return[1,2,3]
.
Note: Recursive solution is trivial, cocould you do it iteratively?
Non-recursive methods are required.
Stack can be used for implementation.
/*** Definition for binary tree * public class TreeNode {* int val; * TreeNode left; * TreeNode right; * TreeNode (int x) {val = x ;} *} */public class Solution {public ArrayList
PreorderTraversal (TreeNode root) {ArrayList
List = new ArrayList
(); Stack
Stack = new Stack
(); If (root! = Null) {stack. push (root); while (! Stack. empty () {list. add (stack. peek (). val); // only peek () can be used here, because if pop () is used, the node will pop up the stack while obtaining the val value. Root = stack. pop (); if (root. right! = Null) {stack. push (root. right); // The right child first enters the stack and then goes out of the stack} if (root. left! = Null) {stack. push (root. left); // The left child goes to the stack first, and the first out of the stack }}return list ;}}