Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么循环要替换向量中已经推送的树节点_Algorithm - Fatal编程技术网

Algorithm 为什么循环要替换向量中已经推送的树节点

Algorithm 为什么循环要替换向量中已经推送的树节点,algorithm,Algorithm,我很难理解为什么循环要替换向量中已经推送的根节点。 下面是我的代码 向量生成器ALBST(整数开始,整数结束) { if(开始>结束) { 向量v; v、 推回(空); 返回v; } 向量v; 对于(int i=start;i对于i的特定值,您只创建一个root对象,然后给它不同的left和right属性值,并每次再次推送到向量。但它是同一个对象(参考) 您似乎想要将不同的对象推送到向量中,因此需要创建每个对象。因此,您需要将赋值移动到最内部循环中的根: for(int i=start;

我很难理解为什么循环要替换向量中已经推送的根节点。 下面是我的代码 向量生成器ALBST(整数开始,整数结束) {

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]));
            }
        }
    }