zoukankan      html  css  js  c++  java
  • PTA数据结构与算法题目集(中文) 7-4

    PTA数据结构与算法题目集(中文)  7-4 是否同一颗二叉搜索树

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

    输入格式:

    输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤)和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

    题目分析: 将元素插入到二叉搜索树中 然后对2个树是否一致进行递归的比较 具体想法类似于7-3 也是递归调用比较函数进行判别
      1 #define _CRT_SECURE_NO_WARNINGS   
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #include<malloc.h>
      5 
      6 typedef struct TNode* LChild;
      7 typedef struct TNode* RChild;
      8 typedef struct TNode* Tree;
      9 typedef int ElementType;
     10 
     11 struct  TNode
     12 {
     13     ElementType Data;
     14     LChild Lc;
     15     RChild Rc;
     16 };
     17 Tree A;
     18 Tree B;
     19 Tree Insert(ElementType Element, Tree T)
     20 {
     21     if (!T)
     22     {
     23         T = (Tree)malloc(sizeof(struct TNode));
     24         T->Data = Element;
     25         T->Lc = NULL;
     26         T->Rc = NULL;
     27     }
     28     else if (Element < T->Data)
     29             T->Lc = Insert(Element, T->Lc);
     30     else if (Element > T->Data)
     31             T->Rc = Insert(Element, T->Rc);
     32     return T;
     33 }
     34 
     35 Tree BuildSearchTree(int N,Tree T)
     36 {
     37     int num;
     38     scanf("%d", &num);
     39     T= Insert(num, T);
     40     for (int i = 1; i < N; i++)
     41     {
     42         scanf("%d", &num);
     43         Insert(num, T);
     44     }
     45     return T;
     46 }
     47 int Judge(Tree T1, Tree T2)
     48 {
     49     if (T1 == NULL && T2 == NULL)
     50         return 1;
     51     else if ((T1 == NULL && T2 != NULL)|| (T1 != NULL && T2 == NULL))
     52         return 0;
     53     if (T1->Data == T2->Data)
     54     {
     55         if (Judge(T1->Lc, T2->Lc) && Judge(T1->Rc, T2->Rc))
     56             return 1;
     57         else
     58             return 0;
     59     }
     60     else
     61         return 0;
     62 }
     63 void Free(Tree B)
     64 {
     65     if (B ==NULL)
     66         return;
     67     if (B->Lc == NULL && B->Rc == NULL)
     68         free(B);
     69     else
     70     {
     71         if (B->Lc != NULL)
     72         {
     73             Free(B->Lc);
     74             B->Lc = NULL;
     75         }
     76         if (B->Rc != NULL)
     77         {
     78             Free(B->Rc);
     79             B->Rc = NULL;
     80         }
     81         Free(B);
     82     }
     83 
     84 }
     85 int main()
     86 {
     87     int N;
     88     scanf("%d", &N);
     89     while (N)
     90     {
     91         int    L;
     92         scanf("%d", &L);
     93         A=BuildSearchTree(N, A);
     94         for (int i = 0; i < L; i++)
     95         {
     96             B=BuildSearchTree(N, B);
     97             if (Judge(A, B))
     98                 printf("Yes
    ");
     99             else
    100                 printf("No
    ");
    101             Free(B);
    102             B = NULL;
    103         }
    104         Free(A);
    105         A = NULL;
    106         scanf("%d", &N);
    107     }
    108     return 0;
    109 }
    View Code
     
  • 相关阅读:
    [swustoj 1021] Submissions of online judge
    [swustoj 404] 最小代价树
    [swustoj 917] K-lucky-number
    [swustoj 183] 种树
    [LA 3887] Slim Span
    [ahu 1248] NBA Finals
    用js获取当前月份的天数
    WampServer
    jquery checkbox选中、改变状态、change和click事件
    为什么排版引擎解析 CSS 选择器时一定要从右往左解析?
  • 原文地址:https://www.cnblogs.com/57one/p/11580013.html
Copyright © 2011-2022 走看看