首页 > 其他分享 >2.子树的大小

2.子树的大小

时间:2024-03-31 13:32:39浏览次数:13  
标签:结点 子树 int 为根 input 大小 import 节点


问题描述
给定一棵包含n个结点的完全m又,结点按从根到叶、从左到右的顺序依次编号。例如下图是一个拥有 11个结点的完全3叉树。
CR
你需要求出第k个结点对应的子树拥有的结点数量
输入格式
输入包含多组询问。
输入的第一行包含一个整数T,表示询问次数
接下来T行,每行包含三个整数n,m,k,表示一组询电
输出格式
输出T行,每行包含一个整数表示对应询问的答案


 
import os
import sys
 
T = int(input())
 
for _ in range(T):
  n,m,k=map(int,input().split())
  #节点左端点 m*(k-1)+2
  l=m*(k-1)+2
  #节点右端点 m*(k-1)+m+1
  r=m*(k-1)+m+1
  #总节点数
  ans=1
  #当前层的节点数
  res=1
  while r<=n: #最后端点不等于n表示未到尽头
    res=res*m  #当前层的节点数
    l=m*(l-1)+2 #更新下一层的最左边子节点
    r=m*(r-1)+m+1
    #计算总节点数
    ans+=res
  ans+=max(0,n-l+1)  #加上最后一层的节点数
  print(ans)
  

参考代码:


import os
import sys

T = int(input())

for _ in range(T):
  # 以k为根节点下的m个子节点为m(k - 1) + 2 ~ m(k - 1) + m + 1
  n, m, k = map(int, input().split())
  # 表示以k为根节点下的最左边的子节点
  l = m * (k - 1) + 2
  # 表示以k为根节点下的最右边的子节点
  r = m * (k - 1) + m + 1
  # 子树的结点总数, 根节点个数为1
  ans = 1
  # 记录每一层子结点的数量
  res = 1
  # 如果子节点最右子节点小于等于n, 说明没到尽头, 这一层子节点是满的
  while r <= n:
    # 当前层子节点数目
    res = res * m
    # 更新下一层的最左边子节点
    l = m * (l - 1) + 2
    # 更新下一层的最右边子节点
    r = m * (r - 1) + m + 1
    ans += res
  ans += max(0, n - l + 1)  # 最后一层最右端点就是n, 直接用n-l+1计算出这层的结点数量
  print(ans)

标签:结点,子树,int,为根,input,大小,import,节点
From: https://blog.csdn.net/weixin_72050316/article/details/137198061

相关文章

  • [转帖]openEuler 22.03 LTS 内核基础页大小配置选项讨论
    https://gitee.com/openeuler/kernel/issues/I4HDHZ 简介页表在操作系统中作为最基础的内存分配结构,ARM64支持4K、16K、64K不同大小的页表。当前页表大小只支持静态配置,不支持动态修改。OS一旦选定一个页表大小,为了兼容性考虑,在该版本生命周期内,一般不会再修改。openEul......
  • 【快速解决】使用python图形库,禁止用户拉伸收缩界面,使用tkinter中的window.resizable(
    目录简单介绍1.window.resizable()方法2.参数取值说明3.控制效果4.使用场景示例代码解释展示使用前后的样子 使用前使用后结语简单介绍当你在使用Python的tkinter库创建GUI(图形用户界面)应用程序时,可以使用window.resizable(False,False)技术来控制窗口是......
  • C#手动改变自制窗体的大小
    目录1.Cursor类的Position属性2.改变窗体大小的计算方法3.Resources设计(1)Resources资源图片管理(2)GetObject方法设计(3)两种获取资源图片的方法4.示例        当用户去除Winform窗体边框,自行设置窗体外观时,用户就不能使用Windows窗体应用的功能对自定义窗体的大......
  • 数据库对象大小统计脚本
    获取数据库排名前20的表selectt.table_catalogasdb,n.nspnameasschemaname,c.relname,c.reltuples::numericasrowcount,sys_size_pretty(sys_table_size('"'||nspname||'"."'||relname||......
  • js对比日期大小
    我们在日常开发过程中,经常会用到JavaScript语言在前端代码中,进行日期的选择,比如开始日期和结束日期的选择,同时我们希望用户在选择日期的时候不要选错日期,比如结束日期早于开始日期,那么从逻辑上数据肯定是错的,所以为了检测用户选择的日期是否正确,将会用到开始日期和结束日期的比......
  • Qt 大小端字节序转换的方法
    在Qt中,可以使用qToLittleEndian和qToBigEndian两个函数来实现大小端字节序之间的转换。1.转换为小端字节序:1quint32num=0x12345678;2quint32littleEndianNum=qToLittleEndian(num);//转换为小端字节序2.转换为大端字节序:1quint32num=0x12345678;2quint......
  • 如何在Java中读取超过内存大小的文件
    读取文件内容,然后进行处理,在Java中我们通常利用Files类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。接下来,我们就来......
  • Qt 大小端转换
    大端模式和小端模式是计算机中经常涉及到的两种字节序,也有大端对齐、小端对齐、大尾、小尾等叫法。一、起源说起这两种模式,就不得不提一下大端(Big-endian)和小端(Little-endian)这两个英文上的起源。“endian”一词来源于乔纳森·斯威夫特的小说格列佛游记。Lilli......
  • Long long类型比较大小
    long与Longlong类型和Long类型是不一样,long类型属于基本的数据类型,而Long是long类型的包装类。结论long是基本数据类型,判断是否相等时使用==,即可判断值是否相等。(基本数据类型没有equals()方法)。Long是引用数据类型,当其数值在[-128,127]之间时,用==判断是否相等,亦可用......
  • 以二叉链表为存储结构,在二叉树中删除以值x为根结点的子树
    【问题描述】首先输入扩展二叉树的前序序列,构建二叉树,然后输入希望删除的节点,输出删除后二叉树的前序和中序遍历序列。【输入形式】输入扩展二叉树的前序序列。【输出形式】分两行分别输出删除后二叉树的前序和中序遍历序列。【样例输入】ab##cd##e##c【样例输出】......