#include <stdio.h>
#include <stdlib.h>
typedef int KeyType;
typedef struct BSTNode{
KeyType key;
struct BSTNode *lchid,*rchild;
}BSTNode,*BiTree;//构建一个二叉树的结构体
int bst_insert(BiTree &T,KeyType key){
BiTree TreeNew=(BiTree) calloc(1,sizeof (BSTNode));//为新来的数据申请一个空间
TreeNew->key=key;//将来的数据赋给treepnew
if (T==NULL){
T=TreeNew;//将第一个数据给树根
return 0;
}
BiTree p=T,parent;
while (p){
parent=p;//定义一个父亲指针用来存放p开始的值,因为一开始o是树根,所以parent的值是树根,之后根据数值的改变会发生改变
if (key>p->key){
p=p->rchild;
} else if(key<p->key){
p=p->lchid;
} else{
return -1;
}//程序结束便知道p所在的位置
}//下列代码将值放入需要放到的位置
if (key>parent->key){
parent->rchild=TreeNew;
} else if(key<parent->key){
parent->lchid=TreeNew;
}
return 0;
}
void creat_bst(BiTree &T,KeyType* str,int len){
int i;//将数据依次放入树中
for(i=0;i<len;i++){
bst_insert(T,str[i]);
}
}
void inorder(BiTree tree){
if (tree!=NULL){
inorder(tree->lchid);
printf("%d ",tree->key);
inorder(tree->rchild);
}
}
//查找二叉树中的值
BiTree search(BiTree tree,KeyType key,BiTree &parent){
parent=NULL;
while(tree!=NULL&&key!=tree->key){
parent=tree;
if(key>tree->key){
tree=tree->rchild;
}else{
tree=tree->lchid;
}
}
return tree;
}
int main() {
BiTree tree=NULL;
KeyType str[7]={54,20,66,40,28,79,58};
creat_bst(tree,str,7);
inorder(tree);//使用中序遍历遍历数据
printf("\n");
BiTree pos,parent;
pos=search(tree,40,parent);
if (pos){
printf("success %d\n",pos->key);
} else{
printf("failed");
}
return 0;
}
二叉树的遍历与查找
最新推荐文章于 2024-06-15 16:46:40 发布