函数" haspath"被赋予指向二进制树和两个整数的根指针。如果整数a到整数b之间有路径,它将返回。我以为我可以使用助手函数"查找"在树上找到整数a",然后更改指针作为参考,然后从" a"的树节点找到整数b。但是,查找函数并未通过引用通过的指针更改指针。
//辅助功能在树中找到一个整数作为参考
传递的整数bool find(BinaryTreeNode*&node, int a){
if (node==nullptr){
return false;
} else if (node->data==a){
return true;
}else {
return find(node->left, a) or find(node->right, a);
}
}
//a function returns if there is a path between integer a and b in the
//binary tree passed in as root node
bool hasPath(BinaryTreeNode* node, int a, int b){
if (node==nullptr) return false;
BinaryTreeNode*temp = node;
return find(temp,a) //the pointer temp should be changed, but didn't
and
find(temp, b);
}
您的find
功能中的任何内容都分配给node
参考,因此temp
中的CC_3变量不变。
要使这项工作要更改hasPath
,以便它返回您感兴趣的节点。无需使用参考。由于某些原因,新手通常会忽略函数可以返回值的事实。
将find
更改为此
BinaryTreeNode* find(BinaryTreeNode* node, int a)
{
if (node == nullptr)
{
return nullptr; // return nullptr for not found
}
else if (node->data == a)
{
return node; // found the node
}
else
{
// recurse left or right
BinaryTreeNode* temp = find(node->left, a);
return temp ? temp : find(node->right, a);
}
}
然后更改hasPath
以使用返回的节点
bool hasPath(BinaryTreeNode* node, int a, int b)
{
if (node == nullptr)
return false;
node = find(node, a);
if (node == nullptr)
return false;
node = find(node, b);
if (node == nullptr)
return false;
return true;
}
顺便说一句,我没有对您算法的有效性发表任何评论,但我相信上面的代码是您要实施的。