【发布时间】:2021-02-04 03:08:22
【问题描述】:
我对编码比较陌生,所以我希望能得到一些帮助,尤其是当我没有人可以询问并且只有书籍和 YouTube 可以咨询时。
这是我的函数代码,该函数从给定的字符串按级别顺序生成二叉树。为了弄清楚这一点,我做了很多试验和错误。
我的问题是为什么这段代码只在队列包含指针地址时才有效,即队列是queue<TreeNode**>q,而不是当它由指针组成时,即queue<TreeNode*>q。
注意:在使用队列
我觉得第二种情况(queue<TreeNode*>q)也应该有效,因为它是指针而不是实际存储的对象。所以它应该与存储左右的逻辑相同。
TreeNode* deserialize(string data) {
if(data=="#,"){return {};}
stringstream a(data);
string temp;
vector<string>token;
while(getline(a, temp, ','))
{token.push_back(temp);}
TreeNode* root=NULL;
queue<TreeNode**>q;
q.push(&root);
for(int i=0;i<token.size();i++)
{
if(token[i]!="#")
{
(*q.front())=new TreeNode(stoi(token[i]));
q.push(&(*q.front())->left);
q.push(&(*q.front())->right);
}
q.pop();
}
return root;
}
};
使用当前代码并使用队列
【问题讨论】:
-
每次推送时,都会额外引用
&,每次弹出时,都会取消引用*。您创建了额外的抽象层;这就是为什么类型是这样的原因。 -
你尝试
queue<TreeNode*>时失败了什么?编译错误?逻辑错误?输出错误?这不像我们可以调查你的想法,看看你尝试了什么。 (嗯,至少我们大多数人。)也许你应该发布不起作用的代码,而不是发布有效的代码?
标签: c++