Algorithm 为什么循环要替换向量中已经推送的树节点
我很难理解为什么循环要替换向量中已经推送的根节点。 下面是我的代码 向量生成器ALBST(整数开始,整数结束) {Algorithm 为什么循环要替换向量中已经推送的树节点,algorithm,Algorithm,我很难理解为什么循环要替换向量中已经推送的根节点。 下面是我的代码 向量生成器ALBST(整数开始,整数结束) { if(开始>结束) { 向量v; v、 推回(空); 返回v; } 向量v; 对于(int i=start;i对于i的特定值,您只创建一个root对象,然后给它不同的left和right属性值,并每次再次推送到向量。但它是同一个对象(参考) 您似乎想要将不同的对象推送到向量中,因此需要创建每个对象。因此,您需要将赋值移动到最内部循环中的根: for(int i=start;
if(开始>结束)
{
向量v;
v、 推回(空);
返回v;
}
向量v;
对于(int i=start;i对于i
的特定值,您只创建一个root
对象,然后给它不同的left
和right
属性值,并每次再次推送到向量。但它是同一个对象(参考)
您似乎想要将不同的对象推送到向量中,因此需要创建每个对象。因此,您需要将赋值移动到最内部循环中的根
:
for(int i=start;i<=end;i++)
{
vector<TreeNode*> left=generateAllBST(start,i-1);
vector<TreeNode*> right=generateAllBST(i+1,end);
for(int j=0;j<left.size();j++)
{
for(int k=0;k<right.size();k++)
{
TreeNode* root=new TreeNode(i,NULL,NULL); // <---
root->left=left[j];
root->right=right[k];
v.push_back(root);
}
}
}
用于(int i=start;i有一个非常小的缺陷,实际上我在循环中编辑右指针和左指针,因此根节点也应该在循环中再次初始化以创建新的BST不要发布代码、数据、错误消息等的图像-复制或在问题中键入文本。对于每个i,您只创建一个根
对象,那么你期望什么呢?如果你想推送不同的对象,那么你必须在内部循环中创建根
。你还应该用适当的语言标记这个问题。是的,你是对的。谢谢,我在构造时犯了一个错误,因为所有的组合都是新的树
for(int i=start;i<=end;i++)
{
vector<TreeNode*> left=generateAllBST(start,i-1);
vector<TreeNode*> right=generateAllBST(i+1,end);
for(int j=0;j<left.size();j++)
{
for(int k=0;k<right.size();k++)
{
TreeNode* root=new TreeNode(i,NULL,NULL); // <---
root->left=left[j];
root->right=right[k];
v.push_back(root);
}
}
}
for(int i=start;i<=end;i++)
{
vector<TreeNode*> left=generateAllBST(start,i-1);
vector<TreeNode*> right=generateAllBST(i+1,end);
for(int j=0;j<left.size();j++)
{
for(int k=0;k<right.size();k++)
{
v.push_back(new TreeNode(i,left[j],right[k]));
}
}
}