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是全局函数。在第一个代码中,除此之外,我只有一个主函数。链接到问题:酷,那么你似乎无法控制你的函数的驱动程序代码。驱动程序代码可能多次调用您的函数。