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;
    }
  • 相关阅读:
    AFNetworking 使用
    AFNetWork 请求https
    Label加下滑线
    iOS 学习资料
    调用系统的打电话,发短信,邮件,蓝牙
    NSObject
    本地消息和消息推送
    AFNNetworking 中json格式不标准的解决办法
    UitableView 动态高度的优化 提高寻星效率
    cell 高度的计算
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9431478.html
Copyright © 2011-2022 走看看