zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1115. Counting Nodes in a BST (30)

    简单题。统计一下即可。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<queue>
    #include<stack>
    #include<algorithm>
    using namespace std;
    
    const int maxn=100000+10;
    struct Node
    {
        int left;
        int right;
        int val;
        int dep;
    } s[maxn];
    
    int n;
    int a[maxn];
    int max_dep,n1,n2;
    
    void dfs(int x,int dep)
    {
        max_dep=max(max_dep,dep);
        s[x].dep=dep;
        if(s[x].left!=-1) dfs(s[x].left,dep+1);
        if(s[x].right!=-1) dfs(s[x].right,dep+1);
    }
    
    void DFS(int x)
    {
        if(s[x].dep==max_dep) n1++;
        else if(s[x].dep==max_dep-1) n2++;
        if(s[x].left!=-1) DFS(s[x].left);
        if(s[x].right!=-1) DFS(s[x].right);
    }
    
    int main()
    {
        scanf("%d",&n);
    
        if(n==0) printf("0 + 0 = 0
    ");
        else
        {
            for(int i=1; i<=n; i++) scanf("%d",&a[i]);
    
            for(int i=0; i<=n; i++) s[i].left=s[i].right=-1;
            int id=0;
            s[id++].val=a[1];
    
            for(int i=2; i<=n; i++)
            {
                int now=0;
                while(1)
                {
                    if(a[i]<=s[now].val)
                    {
                        if(s[now].left!=-1) now=s[now].left;
                        else
                        {
                            s[now].left=id;
                            s[id++].val=a[i];
                            break;
                        }
                    }
    
                    else
                    {
                        if(s[now].right!=-1) now=s[now].right;
                        else
                        {
                            s[now].right=id;
                            s[id++].val=a[i];
                            break;
                        }
                    }
                }
            }
    
            max_dep=n1=n2=0;
            dfs(0,1);
            DFS(0);
            printf("%d + %d = %d
    ",n1,n2,n1+n2);
        }
        return 0;
    }
  • 相关阅读:
    jquey 阻止表单提交
    Array.prototype.remove 删除数组元素
    <asp:HiddenField> 控件 实现键值对保存
    jquery实现倒计时
    作业
    第六周作业
    第四周作业
    第二次作业
    2021.3.4(四个题)
    增删改查
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5645234.html
Copyright © 2011-2022 走看看