彗星爱酿酒 2023-04-19 00:24 采纳率: 60.7%
浏览 106
已结题

判断是否为同一颗二叉搜索树

7-1 是否同一棵二叉搜索树分数 34
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。
输入格式:
输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。随后L行,每行给出N个插入的元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。
输出格式:
对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。
输入样例:
4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0
输出样例:
Yes
No
No
我的代码

#include <stdio.h>
#include <stdlib.h>
typedef struct Node *Position;
typedef Position Bintree;
struct Node{
    int Data;
    Bintree Left;
    Bintree Right;
};

int CreatBintree(int n);
int Compare(Bintree BT,Bintree T);
int main(){
    Bintree BT,T;
    int n,count,x;
    scanf("%d",&n);
    if(n!=0){
        BT=CreatBintree(n);
        scanf("%d",&count);
        for(int i=1;i<=count;i++){
            T=CreatBintree(n);
            if(Compare(BT,T)){
                printf("Yes");
            }else{
                printf("No");
            }
        }
    }else{
        printf("No");
    }
}
int CreatBintree(int n){
    Bintree BT,T;
    int m;
    scanf("%d",&m);
    BT=T=(Bintree)malloc(sizeof(struct Node));
    BT->Data=m;
    BT->Left=BT->Right=NULL;
    for(int i=1;i<=n-1;i++){
        BT->Left=BT->Right=(Bintree)malloc(sizeof(struct Node));
        scanf("%d",&m);
        if(m<BT->Data){
            BT->Left->Data=m;
            BT->Left->Left=BT->Left->Right=NULL;
        }else if(m>BT->Data){
            BT->Right->Data=m;
            BT->Right->Left=BT->Right->Right=NULL;
        }
    }
    BT=T;
    free(T);
    return BT;
}
int Compare(Bintree BT,Bintree T){
    if(T->Data!=BT->Data){
        return 0;
    }else{
        return (Compare(BT->Left,T->Left)&&Compare(BT->Right,T->Right));
    }
}

可以帮忙改改吗?又为什么要这么改呢?能具体讲解一下吗?我实在看不哪里又错了,谢谢了

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-04-19 01:40
    关注
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 创建了问题 4月19日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上