http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2482&cid=1184

题目描述

二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树

输入

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树) 

示例输入

2
123456789
987654321
432156789
0

示例输出

NO
NO
 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
//int mark=1;
typedef struct node
{
char data;
struct node *lchild,*rchild;
} BiTreeNode,*BiTree;
char sh[],sh1[],sh2[];
char ch[];
int count=;
int BSTinsert(BiTree *T,char x);//建立排序二叉树,也就是所谓的插入操作。
void InOrderTraverse(BiTree T);//二叉树的先序遍历,不知道为什么用中序会错误
int judge(char a[],char b[]);
int main()
{
int len;
int n;
while(scanf("%d",&n)&&n)
{
count=;//我错了5遍,都是因为没有在这里再归0一遍,因为是多组输入,所以这里必须有这句话,要不然以后的会覆盖
BiTree T=NULL,T1;
scanf("%s",ch);
int len1 = strlen(ch);
for(int i=;i<=len1-;i++)
{
BSTinsert(&T,ch[i]);
}
InOrderTraverse(T);
sh1[count]='\0';//这里要加结束符
strcpy(sh2,sh1);//因为在下面的操作中sh1的值会被覆盖,所以在这里的话要提前赋值给sh2;
for(int i=;i<=n;i++)
{
count=;
T1=NULL;
memset(sh1,,sizeof(sh1));
scanf("%s",sh);
len=strlen(sh);
for(int j=;j<=len-;j++)
{
BSTinsert(&T1,sh[j]);
}
InOrderTraverse(T1);
sh1[count]='\0';
int flag=judge(sh1,sh2);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return ;
}
int judge(char a[],char b[])
{
if(strcmp(a,b)==)
return ;
else
return ;
}
int BSTinsert(BiTree *T,char x)
{
BiTreeNode *p,*cur,*parent=NULL;
cur=*T;
while(cur!=NULL)
{
parent=cur;
if(x<cur->data)
cur=cur->lchild;
else
cur=cur->rchild;
}
p=(BiTreeNode *)malloc(sizeof(BiTreeNode));
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(!parent)
*T=p;
else if(x<parent->data)
parent->lchild=p;
else
parent->rchild=p;
return ;
}
void InOrderTraverse(BiTree T)
{
if(T)
{
sh1[count++] = T->data;
InOrderTraverse(T->lchild);
InOrderTraverse(T->rchild);
}
}

SDUT2482二叉排序树的更多相关文章

  1. 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较

    二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』   二分法的存储要求:要求顺序存储,以便于根据下标随机访问   二分法的时间效率:O(Log(n))   二分 ...

  2. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  3. 数据结构图文解析之:树的简介及二叉排序树C++模板实现.

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  4. 二叉树建立,遍历和二叉排序树的判断【c++】

    // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...

  5. PAT A 1115. Counting Nodes in a BST (30)【二叉排序树】

    题目:二叉排序树,统计最后两层节点个数 思路:数组格式存储,insert建树,dfs遍历 #include<cstdio> #include<iostream> #includ ...

  6. 二叉排序树(Binary Sort Tree)

    参考文章:http://blog.csdn.net/ns_code/article/details/19823463 不过博主的使用第一种方法操作后的树已经不是二叉排序树了,值得深思!! #inclu ...

  7. HDU 3999 二叉排序树

    The order of a Tree Problem Description The shape of a binary search tree is greatly related to the ...

  8. 二叉排序树(BST)的建立

    给一个非递归的吧. /* 已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n), 以数组a中的数据作为输入建立一棵二叉排序树 ...

  9. POJ 2418 各种二叉排序树

    题意很明确,统计各个字符串所占总串数的百分比,暴力的话肯定超时,看了书上的题解后发现这题主要是用二叉排序树来做,下面附上n种树的代码. 简单的二叉排序树,不作任何优化(C语言版的): #include ...

随机推荐

  1. request.getSession();为什么不用response儿用request!

    首先回答为什么分别是response和request这两个内置对象.你得先明白你通过获取对象是做什么用的,是往哪用的.第一个PrintWriter out=response.getWriter()是想 ...

  2. C++与Java多态的区别

    多态是指用父指针指向不同子类对象时,调用其共有的函数,不同的子类会有不同的行为.虽然C++和Java都具有多态机制,但是他们的实现不同,使用时的效果也会略有不同. 在C++中 普通函数调用:具体调用哪 ...

  3. iOS界面布局设计

    参考资料: 1. 谈谈如何学习ios 8的界面和布局设计 2. iOS 8 Auto Layout界面布局系列 3. 为iPhone 6设计自适应布局 4. 几张图弄明白iOS布局中的尺寸问题

  4. CodeIgniter(CI 3.0)分页类实践记录

    最近在学习B/S,选择了PHP CI框架作为切入点. 在尝试制作个人CMS的时候遇到了需要分页的情况,网上好像搜不到3.0版本以上的例子,下面附上本地实验的代码,供参考. 数据库情况如下: 首先看Co ...

  5. C#简单的加密类

    1.加密 public class EncryptHepler { // 验值 static string saltValue = "XXXX"; // 密码值 static st ...

  6. net中的编译

    1.MSBuild 四个基本块(属性.项.任务.目标): MSBuild属性:   属性是一些键/值对,主要用来存储一些配置信息. MSBuild  项:   主要是存储一些项目文件信息,以及文件的元 ...

  7. CentOS 6.4 下搭建 MongoDB 2.4.9 环境

    一.下载MongoDB2.4.9版 下载MongoDB wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz 解压Mo ...

  8. CentOS 7 终端设置屏幕分辨率

    在grub中我们修改的是/boot/grub/grub.conf,而在grub2中要修改的文件是/boot/grub2/grub.cfg inux16 /vmlinuz-3.10.0-123.el7. ...

  9. 如何查看 Apache 的版本

    查看 Apache 服务器版本的命令行为: httpd -v 或者 apachectl -v 例如:用 Xshell 连接到服务器后,输入:httpd -v 或者:apachectl -v 返回: S ...

  10. java web 路径 --转载

    主题:java(Web)中相对路径,绝对路径问题总结 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:\xyz\test.txt 代表 ...