zoukankan      html  css  js  c++  java
  • SDUT ACM 2600 子节点计数 Anti

     

    子节点计数

    Time Limit: 1000MS    Memory limit: 65536K

    题目描述

    给定一棵树的前序和中序序列,求以指定关键字节点为根的子树的节点个数。
     

    输入

     第一行包含一个整数 T(T <= 20),表示有 T 组测试数据;
    每组测试数据第一行为整数 N(1 <= N <= 50),表示树的总结点数;接下来两行为前序和中序序列;第三行有正整数 M( 1 <= M <= 30),表示有 M 条查询; 最后 M 行有M 个整数,表示查询以该整数为关键字的节点。
    输入保证前序和中序序列合法且任意两个节点关键字不同。
     

    输出

     每组测试数据有 M 行,每行有一个整数表示每条查询的节点总数。
     

    示例输入

    1
    5
    23 2 67 59 98
    2 23 59 67 98
    4
    23
    2
    67
    59
    

    示例输出

    5
    1
    3
    1
    

    这是前几天选拔赛的一个题,当时就是这个思路,但是调试结果不对,不知道哪里手误了。。今天又这样写了一遍,AC果断姗姗来迟了。。

    #include <stdio.h>
    #include <stdlib.h>
    struct node
    {
        struct node *left, *right;
        int data;
    };
    void build(struct node* &p, int len, int s1[], int s2[])
    {
        if(len <= 0)return;
        p = (struct node*)malloc(sizeof(struct node));
        p->data = s1[0];
        p->left = p->right = NULL;
        int m = 0;
        while(s1[0] != s2[m])m++;
        build(p->left, m, s1+1, s2);
        build(p->right, len-m-1, s1+m+1, s2+m+1);
    }
    int sum;
    void preorder(struct node* &root)
    {
        if(root == NULL)return;
        sum++;
        preorder(root->left);
        preorder(root->right);
    }
    void search(int key, struct node* &p)
    {
        if(p == NULL)return;
        if(p->data == key)
        {
            preorder(p);
            return;
        }
        else
        {
            search(key, p->left);
            search(key, p->right);
        }
    }
    int main()
    {
        int t, n, m, x, a[60], b[60];
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n);
            for(int i = 0; i < n; i++)
                scanf("%d", &a[i]);
            for(int i = 0; i < n; i++)
                scanf("%d", &b[i]);
            struct node *root;
            build(root, n, a, b);
            scanf("%d", &m);
            while(m--)
            {
                scanf("%d", &x);
                sum = 0;
                search(x, root);
                printf("%d\n", sum);
            }
        }
        return 0;
    }
  • 相关阅读:
    mysql 赋给用户权限 grant all privileges on
    ubuntu下aptget安装小型的lamp环境
    Linux系统进程管理
    SQLChapter1_Overview of SQL Server
    SQLChapter2Querying Data
    SQLexercise
    SQLChapter4Managing Databases and Table
    JavaUI添加事件(二)
    java ActionEventDemo
    JavaUI弹出对话框
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3055377.html
Copyright © 2011-2022 走看看