zoukankan      html  css  js  c++  java
  • Uva699 The Falling Leaves(二叉树与递归)

     题解:给你一个先序二叉树,其中左子结点在父节点左一个单位,右节点在父节点右一个单位;让从左到右输出每个水平位置的权值和;本来用的从1开始root<<1建树,发现思路行不通;因为每个节点的root不同,所以考虑到从MAXN/2开始,-1,+1进行建树不就可以了么,每次如果不等于-1,就加上权值,然后找到左边最小的root,右边最大的root输出答案即可;

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    
    using namespace std;
    
    const int maxn=100010;
    int tree[maxn];
    int flag,cnt;
    int l,r;
    
    
    void solve(int root)
    {
        int x;cin>>x;
        if(!cnt&&x==-1) {flag=0;return;}
        cnt=1;
    
        if(x!=-1)
        {
            l=min(l,root);
            r=max(r,root);
            tree[root]+=x;
            solve(root-1);solve(root+1);
        }
    
    }
    
    int main(){
        int kase=0;
        while(true){
            flag=1;
            memset(tree,0,sizeof(tree));
            l=r=maxn/2;
            cnt=0;
            solve(maxn/2);
            if(!flag)break;
            printf("Case %d:
    ",++kase);
            for(int i=l;i<=r;i++){
                if(i!=l)printf(" ");printf("%d",tree[i]);
            }
            puts("
    ");
        }
        return 0;
    }
  • 相关阅读:
    典型用户与场景
    团队工作总结
    《构建之法》第8,9,10章
    冲刺1,2,3,4,5,天
    Github以及推广
    四则运算安卓版ver.mk3
    软件工程APP进度更新
    团队会议之事后工作总结
    构建之法 13-17章有感
    对于其他小组评论的反馈
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9431478.html
Copyright © 2011-2022 走看看