5-4 是否同一棵二叉搜索树
2016-07-25 10:22
260 查看
#include<stdio.h> #include<stdlib.h> typedef struct tree *BinTree; struct tree{ int ele; BinTree left,right; int flag; //flag是访问标志位,1表示已经访问过,0表示还没访问 }; BinTree maketree(int N); BinTree Insert(BinTree T,int x); BinTree Newtree(int x); int check(BinTree T,int y); int judge(BinTree T,int N); void reset(BinTree T); void FreeTree(BinTree T); main() { int N,L,i; BinTree T; scanf("%d",&N); while(N) { scanf("%d",&L); T=maketree(N); for(i=0;i<L;i++) { if(judge(T,N)) printf("Yes\n"); else printf("No\n"); reset(T); } FreeTree(T); scanf("%d",&N); } } BinTree maketree(int N) { int i,x; BinTree T; T=NULL; for(i=0;i<N;i++) { scanf("%d",&x); T=Insert(T,x); } return T; } BinTree Insert(BinTree T,int x) { if ( !T ) T=Newtree(x); else { if (x>T->ele ) T->right = Insert(T->right,x); else if(x<T->ele) T->left = Insert(T->left,x); } return T; } BinTree Newtree(int x) { BinTree T=(BinTree)malloc(sizeof(struct tree)); T->ele=x; T->left=T->right=NULL; T->flag=0; return T; } int check(BinTree T,int y) { if(T->flag) { if(y<T->ele) return check(T->left,y); else if(y>T->ele) return check(T->right,y); else return 0; } else { if(y==T->ele) { T->flag=1; return 1; } else return 0; } } int judge(BinTree T,int N) { int y,i,flag=0; /* flag: 0代表目前还一致,1代表已经不一致*/ for(i=0;i<N;i++) { scanf("%d",&y); if(!flag&&!check(T,y)) flag=1; } if(!flag)return 1; else return 0; } void reset(BinTree T)//将树的标志位置零 { if(T->left) reset(T->left); if(T->right) reset(T->right); T->flag=0; } void FreeTree(BinTree T) { if(T->left) FreeTree(T->left); if(T->right) FreeTree(T->right); free(T); }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- AVL树-自平衡二叉查找树(Java实现)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C 语言简单加减乘除运算
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方
- C语言二进制思想以及数据的存储