问题描述
我有用于搜索二叉树中的节点的代码。如何找到其KEY
作为参数提供的Node的父节点?
struct Tree* search(struct Tree *root,int KEY)
{
struct Tree *temp;
if(root == NULL) return NULL; //Base condition
else
{
if(root-> data == KEY) return root;
else
{
temp = search(root-> Lchild,KEY);
if(temp != NULL) return temp;
else return(search(root-> Rchild,KEY));
}
}
return NULL;
}
解决方法
您将返回其值与Tree
匹配的KEY
节点的地址,而不是其父节点。假设所有节点值在该树中都是不同的,那么如果父节点Tree
的子节点值(左或右子节点)与KEY
匹配,则必须遵循以下代码返回父节点struct Tree* search(struct Tree *root,int KEY){
if(root == NULL){
return NULL;
}
if(root->Lchild != NULL && root->Lchild->data == KEY){
return root;
}
if(root->Rchild != NULL && root->Rchild->data == KEY){
return root;
}
struct Tree *left = search(root->Lchild,KEY);
struct Tree *right = search(root->Rchild,KEY);
if(left != NULL){
return left;
}else if(right != NULL){
return right;
}
return NULL;
}
。
{{1}}