[说明1]
函数BTREE*SortTreeSearch(BTREE*tree,int key)采用非递归方法,在二叉排序树(二叉查找树)中查找键值为key的结点。若找到,则返回键值所在结点的指针,否则返回NULL。
typedef struct node
int data; /*结点的键值*/
struct node *left;
struct node *right;
[C程序代码1]
以上[C程序代码1]中共有3处错误。请在表8-5中指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。
参考答案:行号 修改正确后的完整代码行
3 while(ptr!=NULL&&key!=plx->data)或其等价形式
5 ptr=ptr->left;或其等价形式
9 return ptr;
解析:根据二叉排序树的定义,其左子树中所有结点的关键字值都小于根结点的关键字值,而其右子树中所有结点的关键字值都大于根结点的关键字值。因此当关键字值比当前结点的关键字值小时,转向左子树查找,否则转向右子树查找。
依题意,并通读整段C函数代码可知,本问题所给出的C代码中共有3处错误。
第1个错误是第3行的“while(ptr!=NULL && key=ptr->data)”语句,属于将赋值运算符“=”误用为关系运算符的错误。该行的代码应修改为“while(ptr!=NuLL && key!=ptr->data)”,或其他等价表达形式。
第2个错误是第5行的“ptr=ptr->root”语句。当关键字key值小于当前结点的关键字值时,应该转向左子树查找,即该行代码应修改为“ptr=ptr->left;”,或其他等价表达形式。
第3个错误是第9行的“return *ptr;”语句。若在二叉排序树中找到键值为key的结点,则返回键值所在结点的指针,即该行代码应修改为“retun ptr;”。