【发布时间】:2018-01-28 14:58:58
【问题描述】:
编写一个函数,将二叉树中同一级别的所有相邻节点连接起来。给定二叉树节点的结构如下。
struct Node{
int data;
Node* left;
Node* right;
Node* nextRight;
}
最初,所有nextRight 指针都指向垃圾值。您的函数应将这些指针设置为指向每个节点的右下角。
我的代码是
#include<queue>
/*
Please note that it's Function problem i.e.
you need to write your solution in the form of Function(s) only.
Driver Code to call/invoke your function would be added by GfG's Online Judge.*/
/* struct Node
{
int data;
Node *left, *right;
Node *nextRight; // This has garbage value in input trees
}; */
// Should set the nextRight for all nodes
void connect(Node *p)
{
Node *temp=p;
queue<Node *> q;
Node *pp=NULL;
q.push(p);
q.push(pp);
while(q.empty()==false)
{
Node* nn=q.pop(); // <---------- Error appears here
Node* conn=NULL;
if(nn!=NULL)
{
conn=q.front();
nn->nextRight=conn;
if(nn->left!=NULL)
q.push(nn->left);
if(nn->right!=NULL)
q.push(nn->right);
}
else if(q.empty()==false)
{
q.push(pp);
}
}
}
它给出了这个错误:
Compilation Error...
prog.cpp: In function 'void connect(Node*)':
prog.cpp:120:23: error: void value not ignored as it ought to be
Node* nn=q.pop();
^
帮助我运行代码而不出现此错误。
【问题讨论】:
-
std::queue::pop()不返回值,在调用pop()之前使用front()获取它。 -
使用
front()获取值,pop()删除第一个不返回任何内容的元素en.cppreference.com/w/cpp/container/queue/pop -
请举个小例子。 / 错误信息的哪一部分你不明白?一切?您需要学习基本的 C++。
-
什么不清楚?您正在调用一个返回
void(无)的函数,但试图将该返回值存储为Node*。您希望它如何工作?