【发布时间】:2018-11-28 18:49:40
【问题描述】:
对不起,如果问题标题含糊不清,但这里是描述。
我想检查二叉树中的 2 个节点是否是表亲。我正在调用一个函数,它在遍历时更新关卡的值,然后比较这两个值以查看它们是否是表亲。
我的算法可能不正确,但我只是想弄清楚如何在函数调用中增加指针变量内的值。
void findLevel(Node *node,Node *nodeToFind, int* l)
{
if(!node)
return;
if(node==nodeToFind)
return;
if(node->left)
findLevel(node->left, nodeToFind, (*l)++); #line 1
if(node->right)
findLevel(node->right, nodeToFind, (*l)++);#line 2
return;
//(*l)++; #line 3
}
bool ifCousin(Node *root,Node *a,Node *b)
{
int* l1;
int* l2;
*l1=0;
*l2=0;
findLevel(root, a, l1);
findLevel(root, b, l2);
if(l1==l2)
return true;
else
return false;
}
我在第 1 行和第 2 行遇到错误,因为类型不匹配。 我可以像第 3 行那样,但这会增加每个函数调用的值。我不想要那个。
我如何在拨打电话时提高级别?
错误信息:
prog.cpp: In function 'void findLevel(Node*, Node*, int*)':
prog.cpp:98:49: error: invalid conversion from 'int' to 'int*' [-fpermissive]
findLevel(node->left, nodeToFind, (*l)++);
^
prog.cpp:92:6: note: initializing argument 3 of 'void findLevel(Node*, Node*, int*)'
void findLevel(Node *node,Node *nodeToFind, int* l){
^
prog.cpp:100:50: error: invalid conversion from 'int' to 'int*' [-fpermissive]
findLevel(node->right, nodeToFind, (*l)++);
^
prog.cpp:92:6: note: initializing argument 3 of 'void findLevel(Node*, Node*, int*)'
void findLevel(Node *node,Node *nodeToFind, int* l){
^
【问题讨论】:
-
为什么要打它?是后期增量。调用后递增。
-
您考虑过使用参考吗?
void findLevel(Node *node,Node *nodeToFind, int& l) -
int* l1;后跟*l1=0;这是一个厄运。没有为l1分配存储空间。您将 Crom-knows-what 设置为零,程序讨厌这样。 -
findLevel的目标是什么?如果您试图找出给定节点在树的下方有多远,您的算法将不起作用。它可以一直向左行进,而没有发现节点一直在增加,然后开始向右行进,增加更多。啦啦啦...然后最后吐出访问的节点数,而不是树中节点的深度。我认为你最好通过价值传递,这样你就可以轻松地回溯。 -
我的意思是你想传递指针并且你想增加指针指向的值。那是两件不同的事情,你为什么要这么复杂?
标签: c++ pointers tree binary-tree