数据结构实验之查找一:二叉排序树

来源:互联网 发布:qq飞车指挥官全29数据 编辑:程序博客网 时间:2024/06/06 17:24

题目描述

对应给定的一个序列可以唯一确定一棵二叉排序树。然而,一棵给定的二叉排序树却可以由多种不同的序列得到。例如分别按照序列{3,1,4}和{3,4,1}插入初始为空的二叉排序树,都得到一样的结果。你的任务书对于输入的各种序列,判断它们是否能生成一样的二叉排序树。

输入

输入包含若干组测试数据。每组数据的第1行给出两个正整数N (n < = 10)和L,分别是输入序列的元素个数和需要比较的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列生成一颗二叉排序树。随后L行,每行给出N个元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。

输出

对每一组需要检查的序列,如果其生成的二叉排序树跟初始序列生成的二叉排序树一样,则输出"Yes",否则输出"No"。

示例输入

4 23 1 4 23 4 1 23 2 4 12 12 11 20

示例输出

YesNo

No

#include <stdio.h>#include<stdlib.h>#include<string.h>using namespace std;typedef int status;typedef struct BNode{    int data;    BNode *lchild,*rchild;}*BiTree;status Search(BiTree &T,int key,BiTree f,BiTree &p)//二叉排序树的查找;//p指向数据元素的结点,f指向双亲的结点;{    if(!T)    {        p=f;//树为空,则数据元素指向双亲结点,        return 0;    }    else if(key==T->data)    {        p=T;        return 1;    }    else if(key<T->data)    return Search(T->lchild,key,T,p);//查找树的左子树    else        return Search(T->rchild,key,T,p);//查找树的右字树;}status Insert(BiTree &T,int key)//二叉排序树元素的插入;{    BiTree p,s;    if(!Search(T,key,NULL,p))    {        s=new BNode;        s->data=key;//插入的结点一定是树的叶子结点;        s->lchild=s->rchild=NULL;        if(!p)            T=s;//第一个结点(根结点);        else if(key<p->data)            T/p->lchild=s;        else            T/p->rchild=s;        return 1;    }    return 0;}int judge(BiTree &T,BiTree &T1)//判断是否为同一颗二叉排序树;{    if(!T&&!T1)        return 1;    if(T&&T1)        if(T->data==T1->data)            if(judge(T->lchild,T1->lchild)&&judge(T->rchild,T1->rchild))              return 1;    return 0;}int main(){   int n,num;   BiTree T,T1;   while(~scanf("%d",&n)&&n)   {       int m;       scanf("%d",&m);       T=NULL;//对树初始化处理;       for(int i=0;i<n;i++)       {           scanf("%d",&num);           Insert(T,num);//二叉排序树的元素插入;       }       while(m--)       {           int flag=0;           T1=NULL;//对树初始化处理;           for(int i=0;i<n;i++)           {               scanf("%d",&num);               Insert(T1,num);           }           flag=judge(T,T1);           if(flag)            printf("Yes\n");           else            printf("No\n");       }   }    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 腾讯财理通平台倒闭投资者该怎么办 ebay买到假货了怎么办 善心汇会员被限制出行怎么办 苹果手机屏碎了怎么办 三国志2017仓库满了怎么办 至尊宝密保手机被改了怎么办 电脑版qq游戏途中死机怎么办 登陆企业qq服务器超时怎么办 qq登录不上怎么办错误00001 苹果手机白屏进不了界面怎么办 苹果8p手机白屏怎么办 苹果5s无法关机怎么办 三星手机白屏了怎么办 电脑能上qq打不开网页怎么办? 电脑打不开机怎么办黑屏 英雄杀连接不上怎么办 炫舞时登陆器卸下载失败怎么办 电视为什么会出现登录超时怎么办 登录app时提示请求超时怎么办 手机来短信断网怎么办 百度网络不给力怎么办 网络连接不给力怎么办 抖音网络不给力怎么办 玩lol老是掉线怎么办 无线网络连接有防火墙怎么办啊 千牛重新获取enc-k怎么办 为什么说不能获取对方信息怎么办 qq炫舞客户端被修改怎么办 win7玩穿越卡顿怎么办 玩dnf就蓝屏怎么办win7 平板玩fgo闪退怎么办 微信总是说空间不足怎么办 激活卡时遇到服务器错误怎么办 悦平台服务器错误是怎么办 手机银行提示登录服务器错误怎么办 qq漂流瓶封了怎么办 我的世界被冻结怎么办 qq里被屏蔽了怎么办 qq领手游礼包账号存在异常怎么办 笔记本电脑太卡怎么办最有效 华为平板电脑忘记开机密码怎么办