【无标题】

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;
}
相关推荐
h39742 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客4 小时前
vs 怎么根据dll 生成lib文件
c++·qt
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
信奥卷王5 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵5 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG7 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡7 小时前
数据结构——红黑树
数据结构
码爸7 小时前
数据结构详细介绍
数据结构