//二叉查找树
#include<stdio>
struct node{
int data;
node* lchild;
node* rchild;
}Node;//定义了一个结构名为node的结构体,并且用这个结构体定义了一个结点
//插入,如果查找成的话说明结点已经存在,反过来如果查找失败,那么说明查找是失败的地方一点是结点需要插入的地方
void insert(node* &root,int a){//引用型参数,会改变root的地址,但是如果是node* root就不行,因为函数参数是值传递,这么写只是把root的地址单向复制
if(root==NULL){
root=new node();//root是指针型,这样就把新节点的指针放到了相应位置
root->data=a;
root->lchild=root->rchild=NULL;
return;
}
if(root->data==a){ //找到该元素了
return;
}
if(a<root->data){
insert(root->lchild,a);
}
else{
insert=(root->rchild,a);
}
}
//二叉查找树的创建。创建通过插入实现
void create(node* &root,int data[],int n){//注意要么写返回root,要么就用引用参数,数组名为data,data有n个元素 ,也可以写返回node*的形式
root=new node();
//先把第一个元素赋给根。接下来就是先后插入n个结点的过程
root->data=data[0];
root->lchild=NULL;
root->rchild=NULL;
for(int i=1;i<n;i++){
/*if(root->data>=data) insert(root->lchild,data[i]);
else insert(root->rchild,data[i]);*/
insert(root,data[i]);
}
}
//二叉树的查找
//这个其实也包含了递归的思想
node* Search(node* root,int x,int newdata){//找到所有值为x的结点,将其值全部换为newdata
if(root==NULL){//死胡同,递归边界
return;
}
if(root->data==x){
//找到数据域为x的结点,把它修改程newdata
root->data=newdata;
}
search(root->lchild,x,newdata);
search(root->rchild,x,newdata);
}
二叉查找树 查找修改(void) 插入(&)和创建(*)
最新推荐文章于 2022-03-14 17:27:46 发布