解题思路:
重点都注释了
温馨提示:
判断自己的BST建立得对不对,只需要进行中序遍历,会得到一个从小到大的有序序列。
参考代码:
#include<cstdio>
#include<malloc.h>
typedef struct Node{
int val;
struct Node* left;
struct Node* right;
}*TreeNode;
struct Node* newNode(int val){//这个函数用于生成一个值为val的节点
TreeNode temp=(TreeNode)malloc(sizeof(struct Node));
temp->val=val;
temp->left=temp->right=NULL;//记得初始化
return temp;
}
void buildBST(TreeNode& root,int val){//递归建立BST,&一定要有
if(root==NULL){
root=newNode(val);
return;
}
if(root->val==val)//BST定义就是节点不能重复,所以遇到值相同的节点只需要建立一个就行了
return;
if(root->val<val){
buildBST(root->right,val);
return;
}else
buildBST(root->left,val);
}
TreeNode build(int nodeNum){
TreeNode root=NULL;
for(int i=0;i<nodeNum;i++){
int val;
scanf("%d",&val);
buildBST(root,val);
}
return root;
}
void inorderTraversal(TreeNode root){
if(root){
inorderTraversal(root->left);
printf("%d ",root->val);
inorderTraversal(root->right);
}
}
void search(TreeNode root,int num){//查找
for(int i=0;i<num;i++){
int obj;
scanf("%d",&obj);
TreeNode temp=root;
while(temp!=NULL){
if(temp->val==obj)
break;
if(temp->val>obj){
temp=temp->left;
continue;
}
if(temp->val<obj){
temp=temp->right;
continue;
}
}
if(temp!=NULL)
printf("1 ");
else
printf("0 ");
}
}
int main(){
int num,searchNum;
scanf("%d%d",&num,&searchNum);
TreeNode root=build(num);
search(root,searchNum);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复