数据结构课程设计(C语言)——判断两序列是否为同一二叉搜索树
来源:互联网 发布:电信网络电视怎么办理 编辑:程序博客网 时间:2024/06/14 10:38
判断两序列是否为同一二叉搜索树
要求:
输入:
判断两序列是否为同一二叉搜索树序列 Input开始一个数n(1<=n<=20) ,表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:
如果序列相同则输出YES,否则输出NO
Sample Input
567432
543267
576342
0
Sample Output
YES
NO
说明
二叉搜索树==二叉查找树 == 二叉排序树
二叉搜索树就是根结点大于左孩纸 小于右孩纸,且它的左右子树都符合这个规律。而且二叉搜索树的中序遍历是一个非递减有序序列(考虑有相同结点)。
而要确认出一个序列的二叉树必须知道它的先、中、后序遍历中的两种,平时应该做过这方面的题目,给出两个遍历画出二叉树。
在这里我利用的是数组存放遍历后序列,通过比较数组是否相等确认两个序列是否为二叉搜索树。
源代码
#include<stdio.h>#include<string.h>#include<malloc.h>typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTree;char PreArray[11],PreArray2[11];char InArray[11],InArray2[11];BiTree* CreateBalanceTree(BiTree *T,int x){ if(T == NULL){ T = (BiTree *)malloc(sizeof(BiTree)); T->data = x; T->lchild = NULL; T->rchild = NULL; } else if(x < T->data){ CreateBalanceTree(T->lchild,x); } else if(x > T->data){ CreateBalanceTree(T->rchild,x); } return T;}int PreOrder(BiTree *T,int index){ PreArray[index++] = T->data; if(T->lchild != NULL){ PreOrder(T->lchild,index); } if(T->rchild != NULL){ PreOrder(T->rchild,index); } return index; } int InOrder(BiTree *T,int index){ if(T->lchild != NULL){ InOrder(T->lchild,index); } InArray[index++] = T->data; if(T->rchild != NULL){ InOrder(T->rchild,index); } return index;} int main(){ int N,x,index,i,j; char str1[11],str2[11]; BiTree *T; printf("请输入需要判断的序列个数:\n"); scanf("%d",&N); while(N != 0){ T = NULL; index = 0; printf("请输入序列:\n"); scanf("%s",&str1); for(i =0;i < strlen(str1);i++){ T = CreateBalanceTree(T,str1[i]); } index = PreOrder(T,index); PreArray[index] = '\0'; strcpy(PreArray2,PreArray); index = 0; index = InOrder(T,index); InArray[index] = '\0'; strcpy(InArray2,InArray); for(i = 0;i < N;i++){ T = NULL; scanf("%s",&str2); for(j =0;j < strlen(str2);j++){ T = CreateBalanceTree(T,str2[j]); } index = 0; index = PreOrder(T,index); PreArray[index] = '\0'; if(strcmp(PreArray,PreArray2) != 0){ printf("NO\n"); continue; } index = 0; index = InOrder(T,index); InArray[index] = '\0'; if(strcmp(InArray,InArray2) != 0){ printf("NO\n"); continue; } printf("YES\n"); free(T); } printf("判断结束!\n");break; } return 0;}
0 0
- 数据结构课程设计(C语言)——判断两序列是否为同一二叉搜索树
- 判断两序列是否为同一二叉搜索树序列
- 判断两序列是否为同一二叉搜索树序列
- 数据结构与算法问题 判断两序列是否为同一二叉搜索树序列
- 每日一练——判断两序列是否为同一二叉搜索树序列
- 数据结构系统回顾与总结(3)(判断是否为同一棵二叉搜索树)
- 二叉树——判断整数序列是否为二叉搜索树的后序序列
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- 是否为同一棵二叉搜索树
- 判断二叉搜索树是否为后序遍历序列
- 树——判断是否为二叉搜索树
- LeetCode—判断是否为二叉搜索树
- 数据结构—判断是否为完全二叉树
- 04_树4_判断是否为同一二叉搜索树
- PTA数据结构 5-4 是否同一棵二叉搜索树
- PTA 5-1 是否同一棵二叉搜索树(数据结构)
- 判断是否是同一颗二叉搜索树
- C语言判断一棵树是否为完全二叉树
- iOS时间那点事
- 黑马程序员——java概述及基本语法(一)
- 素数环
- HDU Humble Numbers (dp)
- NSURLSession简单讲解 -----iOS
- 数据结构课程设计(C语言)——判断两序列是否为同一二叉搜索树
- Android RxJava使用介绍(三) RxJava的操作符
- java 框架基础知识(4)----XML基础知识-->Spring配置
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- HDU 最少拦截系统 (dp)
- 转换C文件中的tab为空格的三种方法
- String
- c++中的异常 exception
- mybatis实战教程(mybatis in action),mybatis入门到精通