69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node{
char *data;
struct node *lchild, *rchild;
}Btree;
typedef Btree *BiTree;
int InsertBiTree(Btree **root, char *x)
{
Btree *current = NULL, *parent = NULL, *p = NULL;
current = *root;
while (current != NULL)
{
if (strcmp(current->data, x) == 0)
return 0;
parent = current;
if (strcmp(current->data, x) < 0)
current = current->rchild;
else
current = current->lchild;
}
p = (Btree*)malloc(sizeof(Btree));
if (p == NULL)
{
printf("空间不够\n");
exit(1);
}
int nLen = strlen(x);
if (nLen > 9)
{
printf("输入的字符数不对\n");
exit(1);
}
char* px = (char*)malloc(nLen + 1);
if (px == NULL)
{
printf("空间不够\n");
exit(1);
}
memset(px, 0, nLen + 1);
memcpy(px, x, nLen);
p->data = px;
p->lchild = NULL;
p->rchild = NULL;
if (parent == NULL)
*root = p;
else if (strcmp(x, parent->data) < 0)
parent->lchild = p;
else
parent->rchild = p;
return 1;
}
int BiTreeSearch(Btree *root, char *x){
Btree *current;
if (root != NULL){
current = root;
while (current != NULL){
if (strcmp(current->data, x) == 0)
return 1;
if (strcmp(current->data, x)<0)
current = current->rchild;
else
current = current->lchild;
}
}
return -1;
}
int main(void)
{
Btree *s = NULL;
char ch[10] = { 0 };
printf("请输入最多9个元素:\n");
for (int i = 0; i<12; i++){
scanf_s("%s", ch, 10);
InsertBiTree(&s, ch);
memset(ch, 0, 10);
}
printf("请输入要查找的最多9个元素:");
scanf_s("%s", ch, 10);
if (BiTreeSearch(s, ch) == -1)
printf("无此元素");
else
printf("查找成功");
getchar();
return 0;
}