建立一磁盘目录,搜索某文件是否存在(二叉树模拟)
前期题要
构造思想,文件采用左兄弟,右孩子的想法进行构造。
代码实现
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define MaxSize 100
typedef char ElemType;
int flag=0;
typedef struct node
{
ElemType data[32];
struct node *lchild;//左指针是兄弟
struct node *rchild;//右指针是儿子
}BTNode,*BTree;
BTree CreateLink()
{
char data[32];
char temp;
BTree T;
scanf("%s",&data); // 输入数据
if(*data == '0'){ // 输入0 代表此节点下子树不存数据,也就是不继续递归创建
return NULL;
}else{
T = (BTree)malloc(sizeof(BTNode)); // 分配内存空间
strcpy(T->data,data); // 把当前输入的数据存入当前节点指针的数据域中
printf("请输入%s的左子树(同级兄弟): ",data);
T->lchild = CreateLink(); // 开始递归创建左子树
printf("请输入%s的右子树(右儿子): ",data);
T->rchild = CreateLink(); // 开始到上一级节点的右边递归创建左右子树
return T; // 返回根节点
}
}
int search(BTree T,char *x)
{
if(T==NULL)
{
return -1;
}
if(strcmp(T->data,x)==0)
{
flag=1;
}
search(T->lchild,x); // 递归遍历左子树
search(T->rchild,x); // 递归遍历右子树
}
void ShowXianXu(BTree T) // 先序遍历二叉树
{
if(T==NULL)
{
return;
}
printf("%s ",T->data);
printf(" / \t");
ShowXianXu(T->lchild); // 递归遍历左子树
printf("\n");
printf(" \ \n");
ShowXianXu(T->rchild); // 递归遍历右子树
}
void InOrder(BTree T)//中序遍历的递归算法
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%s ",T->data);
InOrder(T->rchild);
}
}
int main()
{
BTree S;char x[100];
printf("请输入第一个节点的数据:\n");
S = CreateLink();// 接受创建二叉树完成的根节点
printf("\n 开始调用查找功能 \n");
scanf("%s",&x);
search(S,x);
if(flag)
printf("找到了!!");
else printf("未找到!!");
return 0;
}
输出
输入
D
学习
工作
娱乐
0
图片
影片
音乐
0
刘若英
周杰伦
0
东风破.mp3
西风破.mp3
0
0
0
后来.mp3
知道不知道.mp3
0
0
0
0
0
0
0
0