二叉树的遍历与查找

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小yuan在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值