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

    PTA数据结构与算法题目集(中文)  7-23

    7-23 还原二叉树 (25 分)
     

    给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

    输入格式:

    输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

    输出格式:

    输出为一个整数,即该二叉树的高度。

    输入样例:

    9
    ABDFGHIEC
    FDHGIBEAC
    

    输出样例:

    5
    题目分析:利用前序遍历与中序遍历 计算树的高度 利用前序遍历找树节点 然后在中序遍历中限制范围
    这个我写的最后一个测试点无法通过
     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 
     4 int Find(char c, char str[], int Begin,int End)
     5 {
     6     for (int i = Begin; i < End; i++)
     7     {
     8         if (c == str[i])
     9             return i;
    10     }
    11     return -1;
    12 }
    13 
    14 int GetHeight(char str1[], char str2[], int Length)
    15 {
    16     int Height = 0;
    17     int Begin = 0;
    18     int Flag = 0;
    19     int End = Length;
    20     int i = Find(str1[Flag], str2, Begin, End);
    21     if (i == -1)
    22         return Height;
    23     Height++;
    24     while (1)
    25     {
    26         if (End - Begin <= 0)
    27             return Height;
    28         if (i - Begin >=End - i-1)
    29         {
    30             End = i;
    31             Flag++;
    32         }
    33         else
    34         {
    35             Flag += i - Begin + 1;
    36             Begin = i + 1;
    37         }
    38         i = Find(str1[Flag], str2, Begin, End);
    39         if (i == -1)
    40             return Height;
    41         Height++;
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     char str1[52];
    48     char str2[52];
    49     int N;
    50     scanf("%d", &N);
    51     scanf("%s%s", str1,str2);
    52     printf("%d", GetHeight(str1, str2, N));
    53     return 0;
    54 }
    View Code

    看了别人写的

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 
     4 int DFS(char str1[], char str2[], int n)
     5 {
     6     if (n == 0)
     7         return 0;
     8     int i = 0;
     9     for (i = 0; i < n && str1[0] != str2[i]; i++)
    10         ;
    11     int x = DFS(str1 + 1, str2, i)+1;  //左子树
    12     int y = DFS(str1 + i + 1, str2 + i+1, n - i-1)+1; //右子树
    13     return x > y ? x : y;
    14 }
    15 int main()
    16 {
    17     char str1[101];
    18     char str2[101];
    19     int N;
    20     scanf("%d", &N);
    21     scanf("%s%s", str1,str2);
    22     printf("%d", DFS(str1, str2, N));
    23     return 0;
    24 }
    View Code
  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/57one/p/11630430.html
Copyright © 2011-2022 走看看