我编写此代码以在BST中查找节点。代码适用于找到的节点,但代码在找不到节点时崩溃。
我的代码中可能出现的错误是什么?
TreeNode* fetch(TreeNode*root,int d)
{
if(root->data==d)
{
return root;
}
else if(root==NULL)
{
return NULL;
}
else if(d<root->data)
{
return fetch(root->left,d);
}
else if(d>root->data)
{
return fetch(root->right,d);
}
}
TreeNode* temp;
temp=fetch(root,d);
if(temp->data)
{
cout<<temp->data<<" FOUND";
}
else if(temp==NULL)
{
cout<<"Not Found";
}
答案 0 :(得分:1)
您需要在fetch()函数中调整您的顺序。现在,如果root == NULL将会出错,因为它首先检查潜在不存在的节点中的数据是否等于d
。修正如下:
TreeNode* fetch(TreeNode*root,int d)
{
if(root==NULL)
{
return NULL;
}
else if(root->data==d)
{
return root;
}
else if(d<root->data)
{
return fetch(root->left,d);
}
else if(d>root->data)
{
return fetch(root->right,d);
}
}
此外,您需要在底部重新安排支票,原因相同:
if(temp==NULL)
{
cout<<"Not Found";
}
else
{
cout<<temp->data<<" FOUND";
}
答案 1 :(得分:1)
如果是梯形图,则问题在于输入的条件顺序。
请阅读我在代码行上写的评论
TreeNode* fetch(TreeNode*root,int d)
{
if(root->data==d) /* if d doesn't exists, root becomes
null and dereferencing a null
gives error, i.e, null->data is
error. So, first root=null should
be checked*/
{
return root;
}
else if(root==NULL)
{
return NULL;
}
else if(d<root->data)
{
return fetch(root->left,d);
}
else if(d>root->data)
{
return fetch(root->right,d);
}
}
TreeNode* temp;
temp=fetch(root,d);
if(temp->data) // temp=NULL should be must codition
{
cout<<temp->data<<" FOUND";
}
else if(temp==NULL)
{
cout<<"Not Found";
}
答案 2 :(得分:0)
如果节点是叶子,则没有任何情况。在致电fetch(root->left,d)
或fetch(root->right,d)
之前,请先通过检查是否(root-&gt;(左/右)!= NULL)确保节点有左或右元素,然后再次调用fetch。如果它们= = NULL,那么当你导航到树的底部并且没有找到你的元素时,你可以返回NULL。