博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
紫书题目-树叶的下落
阅读量:5738 次
发布时间:2019-06-18

本文共 982 字,大约阅读时间需要 3 分钟。

这一题的题意就是说明有很多的树叶会向下飘动,问最后每一条水平线上的权值是多少。这里的水平是指,每个左孩子是在根结点的左边一个位置上,右孩子实在根节点的右边一个位置上。题目按照先序输入的方式进行。问你每次输入的数据最后按照从左到右的方式输出的数据是多少。

 
这一题的最难的部分应该就是如何解决每一个节点是在同一条水平线上的问题。这个其实很好办,也就是使用一个数组,将每一个输入的数字放同一个位置上。这一题和树状天平一样,都是使用递归输入,每次都把输入的数字放到下相应的数组的位置上去。其中先把第一个数字,第一个数字是属于根节点,那么先把这个数字放到这个数组的中间,这样的话就可以让剩下的数字向两边分布,这样就可以达到目的,其中使用了一个build函数,这个函数是用来处理每一颗子树上的数字的,同时还有一个是init函数,这个函数是用来进行开始的递归的,只有先把 第一个节点安放好才可以进行下一个节点的安放
 
源代码
#include<cstdio>
#include<cstring>
#include<iostream>
 
using namespace std;
 
const int maxn=1000;
int sum[maxn];
 
void build(int p)
{
    int v;
    cin>>v;
    if(v==-1) return;
    sum[p]+=v;
    build(p-1);
    build(p+1);
}
 
bool init()
{
    int v;
    cin>>v;
    if(v==-1) return false;
    memset(sum,0,sizeof(sum));
    int pos=maxn/2;
    sum[pos]=v;
    build(pos-1);
    build(pos+1);
    return true;
}
 
int main()
{
    int kase=0;
    while(init())
    {
        int p=0;
        while(sum[p]==0)
            p++;
        cout<<"Case "<<++kase<<":\n"<<sum[p++];
        while(sum[p]!=0)
            cout<<" "<<sum[p++];
        cout<<"\n\n";
    }
    return 0;
}

转载于:https://www.cnblogs.com/yewa/p/7243553.html

你可能感兴趣的文章
python读excel写入mysql小工具
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
htm5新特性(转)
查看>>
Linux-Centos启动流程
查看>>
php 设计模式
查看>>
后端技术精选 - 收藏集 - 掘金
查看>>
Laravel 服务容器
查看>>
6天面试、斩获6家硅谷巨头Offer,我是如何做到的?
查看>>
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>
前端技术选型的遗憾和经验教训
查看>>
“亲切照料”下的领域驱动设计
查看>>
GIT
查看>>
SRE工程师到底是做什么的?
查看>>
解读:Red Hat为什么收购Ansible
查看>>
PHP json_encode() 函数介绍
查看>>