【无标题】

HJ141 小红的二叉树

  • 题目
  • 题解(28)
  • 讨论(17)
  • 排行

中等 通过率:31.35% 时间限制:1秒 空间限制:1024M

知识点数论

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

小红想知道,深度为 nn 的++满二叉树++ 11有多少条长度为 22 的++简单路径++ 22?由于答案可能很大,请将答案对 (109+7)(109+7) 取模后输出。

在本题中,两条简单路径所包含的点集不同时,被视为不同的。例如,路径 u−vu−v 与路径 v−uv−u 被视为相同的,因为它们均包含点 uu 与点 vv。

一棵深度为 hh 的++满二叉树++ 11由恰好 2h−12h−1 个节点组成,每一个节点要么是叶子节点,要么有 22 个儿子,并且全部叶子节点的深度均为 hh。
++简单路径++22是指这样一条路径,其经过的顶点和边互不相同。

输入描述:

在一行上输入一个正整数 n(1≦n≦104)n(1≦n≦104) 代表满二叉树的深度。

输出描述:

输出一个整数,代表深度为 nn 的满二叉树中,长度为 22 的简单路径的数量。由于答案可能很大,请将答案对 (109+7)(109+7) 取模后输出。

示例1

输入:

复制代码
1

复制输出:

复制代码
0

复制说明:

复制代码
在这个样例中,深度为 11 的满二叉树只有 11 个节点,所以没有长度为 22 的简单路径。

示例2

输入:

复制代码
3

复制输出:

复制代码
7

复制说明:

复制代码
在这个样例中,所给出的满二叉树如下图所示:
cpp 复制代码
// 从深度为2开始,当前叶子节点为2个。每加一层,每个叶子节点会增加三条路径
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n;
int main(){
    cin>>n;
    if(n==1) cout<<0;
    else if(n==2) cout<<1;
    else{
        long long yezi=2,ans=1;
        for(int i=3;i<=n;i++){
            ans=(ans+yezi*3)%mod;
            yezi=(yezi*2)%mod;
        }
        cout<<ans%mod;
    }
    return 0;
}
相关推荐
小小龙学IT12 分钟前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
知无不研2 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
2501_906565122 小时前
数学之美探究
算法
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
C++ 老炮儿的技术栈3 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
leisoo80974 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
qz_Serene5 小时前
C++:类和对象(上)
开发语言·c++
luj_17686 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5556 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴6 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程