Binary Tree Preorder Traversal (Medium)

Description

Given a binary tree, return the preorder traversal of its nodes’ values.

1
2
3
4
5
6
7
8
9
10
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

Analysis

非递归实现树的先序遍历。跟中序差不多。区别是存的数的时机不同。先序在插入节点的同时插入其节点的值

My Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//C++
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/

class Solution {
vector<int> ans;
stack<TreeNode *> node;
public:
vector<int> preorderTraversal(TreeNode *root) {
if(root==NULL)
return ans;
node.push(root);
ans.push_back(root->val);
while(!node.empty()){
while(root && root->left){
node.push(root->left);
root = root->left;
ans.push_back(root->val);
}
TreeNode *t = node.top();
node.pop();
if(t->right){
root = t->right;
node.push(root);
ans.push_back(root->val);
}
}
// for(int i = 0;i<(int)ans.size();i++)
// printf("%d,",ans[i]);
return ans;
}
};