leetcode 144. 二叉树的前序遍历
- 递归
/**
* Definition for a binary tree node.
* 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) {
vector<int> path;
preorderTraversal_helper(root, path);
return path;
}
// path必须引用路径!!
void preorderTraversal_helper(TreeNode* root, vector<int>& path) {
if (root != NULL) {
path.push_back(root->val);
preorderTraversal_helper(root->left, path);
preorderTraversal_helper(root->right, path);
}
}
};
2.栈迭代
在这里插入代码片/**
* Definition for a binary tree node.
* 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) {
vector<int> path;
stack< pair<TreeNode*, bool> > s;
bool visited;
s.push(make_pair(root, false));
while (!s.empty()) {
root = s.top().first;
visited = s.top().second;
s.pop();
if (root == NULL) continue;
if (visited) path.push_back(root->val);
else {
s.push(make_pair(root->right, false));
s.push(make_pair(root->left, false));
s.push(make_pair(root, true));
}
}
return path;
}
};