c plus
递归法
class Solution {
public:
vector<int> res;
vector<int> preorderTraversal(TreeNode* root) {
helper(root);
return res;
}
void helper(TreeNode * root) {
if (root == NULL) return;
res.push_back(root->val);
helper(root->left);
helper(root->right);
}
};
迭代法
先访问根节点,即先将根节点存入结果,然后将右节点放入栈中,待访问完左子树后,you出栈访问。class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode *>s;
TreeNode *rt = root;
while (rt || s.size())
{
while (rt) {
res.push_back(rt->val);
s.push(rt->right);
rt = rt->left;
}
rt = s.top();s.pop();
}
return res;
}
};
%E7%BB%99%E5%AE%9A%E4%B8%80%E4%B8%AA%E4%BA%8C%E5%8F%89%E6%A0%91%EF%BC%8C%E8%BF%94%E5%9B%9E%E5%AE%83%E7%9A%84%20%E5%89%8D%E5%BA%8F%20%E9%81%8D%E5%8E%86%E3%80%82%0A%0A%23%23%23%20c%20plus%0A%0A%0A%0A%20%E9%80%92%E5%BD%92%E6%B3%95%0A%60%60%60c%0Aclass%20Solution%20%7B%0Apublic%3A%0A%20%20%20%20vector%3Cint%3E%20res%3B%0A%20%20%20%20vector%3Cint%3E%20preorderTraversal(TreeNode%20root)%20%7B%0A%20%20%20%20%20%20%20%20helper(root)%3B%0A%20%20%20%20%20%20%20%20return%20res%3B%0A%20%20%20%20%7D%0A%20%20%20%20void%20helper(TreeNode%20%20root)%20%7B%0A%20%20%20%20%20%20%20%20if%20(root%20%3D%3D%20NULL)%20return%3B%0A%20%20%20%20%20%20%20%20res.push_back(root-%3Eval)%3B%0A%20%20%20%20%20%20%20%20helper(root-%3Eleft)%3B%0A%20%20%20%20%20%20%20%20helper(root-%3Eright)%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A%60%60%60%0A%0A*%20%E8%BF%AD%E4%BB%A3%E6%B3%95%0A%E5%85%88%E8%AE%BF%E9%97%AE%E6%A0%B9%E8%8A%82%E7%82%B9%EF%BC%8C%E5%8D%B3%E5%85%88%E5%B0%86%E6%A0%B9%E8%8A%82%E7%82%B9%E5%AD%98%E5%85%A5%E7%BB%93%E6%9E%9C%EF%BC%8C%E7%84%B6%E5%90%8E%E5%B0%86%E5%8F%B3%E8%8A%82%E7%82%B9%E6%94%BE%E5%85%A5%E6%A0%88%E4%B8%AD%EF%BC%8C%E5%BE%85%E8%AE%BF%E9%97%AE%E5%AE%8C%E5%B7%A6%E5%AD%90%E6%A0%91%E5%90%8E%2C%E5%8F%B3%E5%AD%90%E6%A0%91%E5%87%BA%E6%A0%88%E8%AE%BF%E9%97%AE%E3%80%82%0A%60%60%60c%0Aclass%20Solution%20%7B%0Apublic%3A%0A%20%20%20%20vector%3Cint%3E%20preorderTraversal(TreeNode%20root)%20%7B%0A%20%20%20%20%20%20%20%20vector%3Cint%3E%20res%3B%0A%20%20%20%20%20%20%20%20stack%3CTreeNode%20%3Es%3B%0A%20%20%20%20%20%20%20%20TreeNode%20rt%20%3D%20root%3B%0A%20%20%20%20%20%20%20%20while%20(rt%20%7C%7C%20s.size())%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20(rt)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res.push_back(rt-%3Eval)%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s.push(rt-%3Eright)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rt%20%3D%20rt-%3Eleft%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20rt%20%3D%20s.top()%3Bs.pop()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20res%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0A%60%60%60%0A%0A