zoukankan      html  css  js  c++  java
  • pta 编程题6 树的同构

    其它pta数据结构编程题请参见:pta

    题目请参见:树的同构

    因题目中左右子树是按照下标给出,因此用数组存放树是更好的方法。

    判断两棵树是否同构:用递归的方法。如果当前两个结点都为空,则返回TRUE;如果一个结点空一个不空,或者两个结点都不为空但是结点存储的数据不同,则返回FALSE。然后递归地的调用函数,判断是否左子树和左子树相同且右子树和右子树相同,或者左子树和左子树相同且右子树和右子树相同。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 struct Node
     5 {
     6     char data;
     7     int left;
     8     int right;
     9 };
    10 
    11 int buildTree(Node tree[]);
    12 bool isSame(Node tree1[], int root1, Node tree2[], int root2);
    13 
    14 int main()
    15 {
    16     Node tree1[10], tree2[10];
    17     int root1, root2;
    18     root1 = buildTree(tree1);
    19     root2 = buildTree(tree2);
    20     if (isSame(tree1, root1, tree2, root2)) cout << "Yes";
    21     else cout << "No";
    22     return 0;
    23 }
    24 
    25 int buildTree(Node tree[])
    26 {
    27     int num, i, root = -1;
    28     char d, l, r;
    29     cin >> num;
    30     int judgeRoot[10] = {};
    31     for (i = 0; i < num; i++)
    32     {
    33         cin >> d >> l >> r;
    34         tree[i].data = d;
    35         if (l != '-')
    36         {
    37             tree[i].left = l - '0';
    38             judgeRoot[l - '0'] = 1;
    39         }
    40         else tree[i].left = -1;
    41         if (r != '-')
    42         {
    43             tree[i].right = r - '0';
    44             judgeRoot[r - '0'] = 1;
    45         }
    46         else tree[i].right = -1;
    47     }
    48     for (i = 0; i < num; i++)
    49     {
    50         if (judgeRoot[i] == 0) root = i;
    51     }
    52     return root;
    53 }
    54 
    55 bool isSame(Node tree1[], int r1, Node tree2[], int r2)
    56 {
    57     if (r1 == -1 && r2 == -1) return true;
    58     if (r1 == -1 && r2 > -1 || r1 > -1 && r2 == -1) return false;
    59     if (tree1[r1].data != tree2[r2].data) return false;
    60     return isSame(tree1, tree1[r1].left, tree2, tree2[r2].left)
    61         && isSame(tree1, tree1[r1].right, tree2, tree2[r2].right)
    62         || isSame(tree1, tree1[r1].left, tree2, tree2[r2].right)
    63         && isSame(tree1, tree1[r1].right, tree2, tree2[r2].left);
    64 }
  • 相关阅读:
    centos7安装doxygen
    mysql和mariadb支持insert delayed的问题
    Ubuntu用android-ndk-r15c编译boost_1_65_1
    记不住的Android活动的生命周期
    SpringBoot——经典的Hello World【二】
    SpringBoot——报错总结
    SpringBoot——SpringBoot学习记录【一】
    Nginx——配置文件服务下载
    CRAP-API——如何在Linux服务器部署CRAP-API教程
    Linux—— 报错汇总
  • 原文地址:https://www.cnblogs.com/lxc1910/p/8684020.html
Copyright © 2011-2022 走看看