按输入顺序建立二叉搜索树,并搜索某一结点,输出其父结点。
输入格式:
输入有三行: 第一行是n值,表示有n个结点; 第二行有n个整数,分别代表n个结点的数据值; 第三行是x,表示要搜索值为x的结点的父结点。
输出格式:
输出值为x的结点的父结点的值。 若值为x的结点不存在,则输出:It does not exist. 若值为x的结点是根结点,则输出:It doesn't have parent.
输入样例:
2
20
30
20
输出样例:
It doesn't have parent.
###输入样例:
2
20
30
30
输出样例:
20
相关文章:
7-4 二叉搜索树的最近公共祖先 【题目解析】https://blog.csdn.net/qq_61351908/article/details/122620280上述文章内容较全,若上述能够理解,本题应该不是问题。
完整代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree bstSearch(BiTree T,BiTree &parent,int data)
{
if(T){
if(T->data == data)
{
return T;
}
else if(data < T->data)
{
parent = T;
return bstSearch(T->lchild,parent,data);
}
else {
parent = T;
return bstSearch(T->rchild,parent,data);
}
}else return NULL;
}
void bstInsert(BiTree &T,int data)
{
if(T==NULL){
T = (BiTree)malloc(sizeof(BiTNode));
T->data = data;
T->lchild = NULL;
T->rchild = NULL;
}else if(T->data == data)
return;
else if(data < T->data)
bstInsert(T->lchild,data);
else bstInsert(T->rchild,data);
}
int main()
{
BiTree T = NULL,parent = NULL,child = NULL;
int n,x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
bstInsert(T,x);
}
cin>>x;
child = bstSearch(T,parent,x);
if(child == NULL)
{
cout<<"It does not exist."<<endl;
}else if(parent==NULL){
cout<<"It doesn't have parent."<<endl;
}else{
cout<<parent->data<<endl;
}
}