LintCode - Binary Tree Preorder Traversal
阿新 • • 發佈:2018-11-19
解法一 recursion
三種方法,不同在於如何處理vector
class Solution { public: vector<int> preorderTraversal(TreeNode * root) { if(!root) return {}; vector<int> res{root->val}; vector<int> left = preorderTraversal(root->left); vector<int> right = preorderTraversal(root->right); res.insert(res.end(), left.begin(), left.end()); res.insert(res.end(), right.begin(), right.end()); return res; } };
class Solution { public: vector<int> preorderTraversal(TreeNode * root) { vector<int> res; helper(root, res); return res; } void helper(TreeNode* root, vector<int>& res){ if(!root) return; res.push_back(root->val); helper(root->left, res); helper(root->right, res); } };
class Solution { public: vector<int> res; vector<int> preorderTraversal(TreeNode * root) { res.clear(); helper(root); return res; } void helper(TreeNode* root){ if(!root) return; res.push_back(root->val); helper(root->left); helper(root->right); } };
解法二 non-recursion
先right再left因為stack
class Solution {
public:
vector<int> preorderTraversal(TreeNode * root) {
stack<TreeNode*> st;
vector<int> res;
if(!root) return res;
st.push(root);
while(!st.empty()){
TreeNode* t = st.top(); st.pop();
res.push_back(t->val);
if(t->right) st.push(t->right);
if(t->left) st.push(t->left);
}
return res;
}
};