Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1 \ 2 / 3return [1,2,3].
http://oj.leetcode.com/problems/binary-tree-preorder-traversal/
Solution:
Recursive way is simple, just a small modification based on the inorder traversal. You can find it here http://blog.csdn.net/starcroce/article/details/18243793.
We are talking about iterative way. We need to use stack to store these nodes.
First push the root, then pop and print it. Then push right, then push left. Then pop and print left. Then pop and print right. So we get the preorder traversal.
https://github.com/starcroce/leetcode/blob/master/binary_tree_preorder_traversal.cpp
// 52 ms for 67 test cases
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<int> ans;
if(root == NULL){
return ans;
}
stack<TreeNode *> tmp;
tmp.push(root);
while(!tmp.empty()) {
TreeNode *top = tmp.top();
ans.push_back(top->val);
tmp.pop();
// because preorder is root-left-right, so we push right child first
if(top->right != NULL) {
tmp.push(top->right);
}
if(top->left != NULL) {
tmp.push(top->left);
}
}
return ans;
}
};