Recursion 在向量中存储树的预序遍历

Recursion 在向量中存储树的预序遍历,recursion,tree,traversal,tree-traversal,Recursion,Tree,Traversal,Tree Traversal,我试图将我的预序遍历存储在一个向量中。 首先我试过这个 vector<int> s; vector <int> preorder(Node* root) { if(root==NULL) return s; s.push_back(root->data); preorder(root->left); preorder(root->right); return s; } 向量s; 向量预序(节点*根) { if(root==N

我试图将我的预序遍历存储在一个向量中。 首先我试过这个

vector<int> s;
vector <int> preorder(Node* root)
{
  if(root==NULL)
  return s;  
  s.push_back(root->data);
  preorder(root->left);
  preorder(root->right);
  return s;
}
向量s;
向量预序(节点*根)
{
if(root==NULL)
返回s;
s、 向后推(根->数据);
预订单(根->左);
预订单(根->右);
返回s;
}
它给了我一个错误的答案,但后来我尝试了这个

void pre(Node* root,vector<int>& s)
{
  if(root==NULL)
  return;  
  s.push_back(root->data);
  pre(root->left,s);
  pre(root->right,s);
}
vector <int> preorder(Node* root)
{
 vector<int> s;
 pre(root,s);
 return s;
}
void pre(节点*根、向量&s)
{
if(root==NULL)
返回;
s、 向后推(根->数据);
前置(根->左,s);
pre(根->右,s);
}
向量预序(节点*根)
{
向量s;
pre(根,s);
返回s;
}
我得到了正确的答案。我不明白为什么我的第一个代码会给我WA。
(如何在一个函数中执行此操作?

在第一个代码中每次调用函数后,是否清除向量
s
?您似乎调用了多次,但
s
从未被清除。为什么我需要清除它,我的意思是每个节点的push_back函数将执行一次为什么我需要清除向量@SuparshvaBy多个调用我的意思是不是在递归意义上。您似乎正在使用不同的
root
参数在函数外部进行多个预排序调用。另外,我假设
s
是一个全局函数。yas是全局函数。在第一个代码中,除此之外,我只有一个主函数。链接到问题:酷,那么你似乎无法控制你的函数的驱动程序代码。驱动程序代码可能多次调用您的函数。在第一个代码中每次调用函数后,是否清除向量
s
?您似乎调用了多次,但
s
从未被清除。为什么我需要清除它,我的意思是每个节点的push_back函数将执行一次为什么我需要清除向量@SuparshvaBy多个调用我的意思是不是在递归意义上。您似乎正在使用不同的
root
参数在函数外部进行多个预排序调用。另外,我假设
s
是一个全局函数。yas是全局函数。在第一个代码中,除此之外,我只有一个主函数。链接到问题:酷,那么你似乎无法控制你的函数的驱动程序代码。驱动程序代码可能多次调用您的函数。