Given a binary tree, return the preorder traversal of its nodes ' values.
For example:
Given binary Tree {1,#,2,3},
return [3,2,1].
Note:recursive solution is trivial, could do it iteratively?
Recursive implementation code
/***************************************************************** * @Author: Chu hing * @Date: 2015/2/23 18 : * @Status: Accepted * @Runtime: 4 ms******************************************************************/
structtreenode{intVal TreeNode *left; TreeNode *right; TreeNode (intx): Val (x), left (null), right (null) {}};classSolution { Public: vector<int>Preordertraversal (TreeNode *root) { vector<int>Result Helper (root, result);returnResult }voidHelper (TreeNode *root, vector<int>& num) {if(Root) {Num.push_back (root->val); Helper (root->left, num); Helper (root->right, num); } }};
Non-recursive implementation code 1
/***************************************************************** * @Author: Chu hing * @Date: 2015/2/24 00 : Si * @Status: Accepted * @Runtime: 6 ms******************************************************************/
classSolution { Public: vector<int>Preordertraversal (TreeNode *root) { vector<int>Result Stack<TreeNode*>Nodes TreeNode *p = root;if(p) {Nodes.push (P); while(!nodes.empty ()) {p = nodes.top (); Nodes.pop (); Result.push_back (P->val);if(P->right) {Nodes.push (p->right); }if(P->left) {Nodes.push (p->left); } } }returnResult }};
Non-recursive implementation code 2
/***************************************************************** * @Author: Chu hing * @Date: 2015/2/24 01 : * @Status: Accepted * @Runtime: 4 ms******************************************************************/
classSolution { Public: vector<int>Preordertraversal (TreeNode *root) { vector<int>Result Stack<TreeNode*>Nodes TreeNode *p = root; while(P! = NULL | |!nodes.empty ()) {if(P! = NULL) { while(P! = NULL) {Result.push_back (p->val); Nodes.push (P); p = p->left; } }Else{p = nodes.top ()->right; Nodes.pop (); } }returnResult }};
[Leetcode] Binary Tree Preorder Traversal