关于二叉树问题

二叉树的编号--小球下落  https://vjudge.net/problem/UVA-679有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,....,2^D-1.在结点1处放一个小球,它会往下落。每个内点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否则往右走。直到走到叶子结点。一些小球从... 阅读详情

有一颗二叉树,最大深度为D,且所有的叶子的深度都相同。所有结点从上到下从左到右标号为1,2,3,4…2^D-1。在结点1处放一个小球,它会往下落。每一个内结点上都有一个开关,初始值全部关闭,当每次小球落到一个开关上时,状态会发生改变。当小球达到一个内结点时,如果结点开关关闭,则往左,否则往右,知道走到叶子结点。一些小球从结点1处依次开始下落,最后一个小球会落到哪里,输入叶子深度D和小球个数I,输出第I个小球最后所在的叶子编号,假设I不超过整棵树的叶子个数。D <= 20。输入最多包含1000组数据

样例输入
4 2
3 4
10 1
2 2
8 128
16 12345

样例输出
12
7
512
3
255
36358

#include<stdio.h>
#include<string.h>

const int MAXD = 20;

int s[1<<MAXD];//最大结点个数为2^maxd-1 

int main()
 {
      int D, I;
      while(scanf("%d%d", &D, &I) == 2)
        {
            memset(s, 0, sizeof(s));        //首先将所有开关置0 
            int k, n = (1<<D)-1;            //n是最大的结点编号 
            for(int i = 0; i < I; i++)      //连续让I个小球下落 
            {
                k = 1;
                for(;;)
                {
                    s[k] = !s[k];
                    k = s[k] ? k*2 : k*2+1; //根据开关状态选择下落方向 
                    if(k > n) break;        //已经落 "出界"了 
                }
            }
            printf("%d\n", k/2);            //"出界"之前的叶子编号 
        }
      return 0;
 }

下面代码进行优化后节省下一个巨大数组的空间

#include<stdio.h>
int main() {
  int D, I;
  while(scanf("%d%d", &D, &I) == 2) 
  {
    int k = 1;
    for(int i = 0; i < D-1; i++)
      if(I%2) { k = k*2; I = (I+1)/2; }
      else { k = k*2+1; I /= 2; }
    printf("%d\n", k);
  }
  return 0;
}
关于二叉树创建时遇到的问题的解决 之前在创建二叉树时,遇到了一些问题,因为这个忽视的问题而导致在写计算二叉树的叶子数时出现死循环,今天在老师的帮助下找到了问题所在: 之前的创建二叉树的代码为: int CreateBiTree(BiTree *T) { char ch; printf("\n\t\t\t\t\t ch:"); fflush(stdin); scanf("%c",&ch); 阅读详情

相关推荐

洛谷 P3884 [JLOI2009] 二叉树问题

4483其中宽度表示二叉树上同一层最多的结点个数,节点uv之间的距离表示从u到v的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。给定一颗以 1 号结点为根的二叉树,请求出其深度、宽度和两个指定节点xy之间的距离。

exm-zem的博客 1556

小猴子下落

小猴子下落 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关

u012620270的专栏 581

算法设计与分析:二叉树问题的解决思路

讲解一般二叉树问题的解决思想、思路

GentleCP的博客 2800

树01

/此专栏主要根据《算法竞赛入门经典(第2版)》撰写/ /核心思想不变,与原题要求的输入格式有略微差别/ 这一次主要是熟悉左右结点的编号 对于一个结点k,其左子结点、右子结点的编号分别是2k和2k+1。这个结论非常重要 下面我们看一个例子 Dropping,Balls,UVa 679 题目大意:有一棵二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,…,2^D-...

Erin_jwx的博客 249

LinuxCNC 源码解析:从界面开发到硬件交互的实战指南

本文深入解析LinuxCNC源码架构,从用户界面开发到硬件交互的实战指南。涵盖GTK与Tkinter界面开发、HAL硬件抽象层、G代码解析器改造及运动控制核心等关键模块,提供定制化开发技巧与性能优化方案,助力开发者高效掌握数控系统开发。

weixin_27066963的博客 190

学习Ultralytics (下载)

Ultralytics由创立,最初是为了简化目标检测模型的开发和应用,专注于构建高效、易用、性能卓越的深度学习框架。其主要产品之一是 YOLO 系列模型,尤其是最新的YOLOv5和YOLOv8,因其在精度、速度和可扩展性方面的出色表现而广受欢迎。

2301_76846375的博客 2864

小球下落(二叉树的应用)

小球下落 (二叉树的应用) 有一棵二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,...,2^D-1。在结点1处放一个小球,它会往下落。每个内结点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,它的状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否者往右走,直到走到叶子结点。 一些小球从结点1处依次开始下落,最后一

CTTACM的专栏 1312

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入

最近入手了兮克2.5G交换机(兮克SKS1200-8GPY1XF),有 8 个 2.5G 电口和 1 个 10G SFP+ 光口;支持多种组网模式,其中一种是支持使用猫棒接入,由路由器拨号后再回接到交换机,这样就可以替换掉光猫了。

啦啦啦啦 la 1万+

【二叉树】小球下落

题目描述 有一棵二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1,2,3,…,2D-1。在结点1处放一个小球,它会往下落。每个内结点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,它的状态都会改变。当小球到达一个内结点时,如果该结点上的开关关闭,则往左走,否则往右走,直到走到叶子结点,如图所示。 一些小球从结点1处依次开始下落,最后一个小球将会落到哪里呢?...

Luoriliming的博客 1265

U8二次开发CO-基于Net8调用COM对象

本文章介绍的U8二次开发CO技术,就是基于微软COM组件技术,使用微软开源的编程框架Net6/7/8/9来调用U8的COM组件,完成基本的登录认证,工作流处理,数据库操作等。

pccai的博客 5500

1.用Python写了一个进销存管理的软件~需求分析&界面设计&数据库设计&技术路线选择~

前端也打算用Python来写,查了很多的python库,大家比较推荐的是wxpython和QPython,之前接触过一点点的QT,确实非常强大,但是库比较重量级,自己写的这个东西明显配不上QT,又详细调研了一下wxpython,就是它了!

pepper_lihui的专栏 4321

【LeetCode&数据结构】二叉树的应用(一)——单值二叉树问题、相同的树问题、对称二叉树问题、另一棵树的子树问题详解

前言:牛客网和LeetCode的刷题都不可或缺,我们都要做一做,无论是参加竞赛还是笔试面试,至少能提升你的代码能力!洛谷的题目也可以去做一做。力扣的题目对提升代码能力很有帮助,需要有一点基础,几乎都是接口型的题目,关于接口型和IO型的区别我们在本专栏的第一篇中就介绍过了,这里不再赘述,我们进入今天的力扣题目介绍——

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 959

摩尔线程嵌入式面试题及参考答案(2万字长文)

说一下你对 drm 框架的理解。 DRM(Direct Rendering Manager)是 Linux 系统中用于管理图形显示设备的一个重要框架。 从架构层面来讲,它处于内核空间,主要目的是为用户空间的图形应用程序提供一个统一的接口来访问图形硬件。DRM 包括内核态的驱动模块和用户态的库。内核态的驱动负责和硬件进行交互,比如对显存的管理、硬件寄存器的配置等。用户态的库则方便应用程序利用内核态提供的功能进行图形渲染等操作。 在图形显示的具体流程中,DRM 可以控制显示设备的分辨率、刷

大模型大数据攻城狮的专栏 1229

【(Topk问题及其二叉树遍历】

本文主要探讨了两个关键问题:TopK问题和二叉树遍历。首先介绍了TOP-K问题的解决方案,通过建立小堆或大堆来高效筛选前K个最大或最小元素,时间复杂度为O(N)。其次详细讲解了二叉树的三种递归遍历方式(前序、中序、后序),并提供了相应的代码实现。此外,文章还介绍了如何递归计算二叉树节点总数和最大深度的方法。这些算法都体现了递归思想在数据结构处理中的高效应用,通过分解子问题和设置终止条件来解决复杂问题。

2301_76821799的博客 975

逻辑回归:利用Python实现二分类算法

通过使用Python编写的代码,我们可以训练逻辑回归模型并进行预测。接下来,我们将实现逻辑回归算法的训练函数。训练函数将接受训练数据集X和对应的标签y,以及学习率alpha和迭代次数num_iterations。训练完成后,我们可以使用训练得到的参数theta来进行预测。在这个例子中,我们有一个包含4个样本的训练数据集X,每个样本有两个特征。在这个例子中,如果预测概率大于等于0.5,则预测为类别1,否则预测为类别0。现在,我们可以使用训练函数来训练模型。根据给定的样本x_new,预测函数将返回相应的类别。

XlltEditor的博客 326

python乘法运算 信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

本文解析了全国青少年信息素养大赛Python编程挑战赛的乘法运算题目。题目要求通过递归算法实现两个自然数的乘法运算,并输出算式。算法分析指出可将乘法转化为累加,使用递归函数实现。程序代码展示了一个自定义函数add(),通过递归调用完成累加运算。文章还分析了考点,包括递归函数、输入处理、分支语句等编程基础知识的应用。最后强调解题方法的多样性,重点在于理解递归原理和实现题目要求。该题目难度适中,主要考查选手对递归算法的理解和编程基础能力。

青少年编程学习指导 789

二叉树的12大问题

转载自:http://blog.youkuaiyun.com/randyjiawenjie/article/details/6772145 觉得很好,收藏了 二叉树的常见问题有如下几个,如果解决好了,就跟链表一样轻松:唯一不一样的是,二叉树是非线性结构。常见的问题如下 1.二叉树三种周游(traversal)方式:   2.怎样从顶部开始逐层打印二叉树结点数据   3.如何判断

K神丶的专栏 1704

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二叉树问题——二叉树的路径问题

二叉树的路径问题

庄小焱 463

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Marscode75:二叉树供暖问题

天气越来越冷了,村子里有留守老人缺少照顾,会在这个冬天里挨冻,小R想运用自己的知识帮帮他们。已知村庄里每户人家作为一个节点,这些节点可以组成一个二叉树。我们可以在二叉树的节点上供应暖炉,每个暖炉可以为该节点的父节点、自身及其子节点带来温暖。给定一棵二叉树,求使整个村庄都暖和起来至少需要供应多少个暖炉?本题按层遍历顺序描述二叉树的节点情况。值为 1,代表存在一个节点,值为 0,代表不存在该节点。样例1:样例2:样例3:该问题需要在一个二叉树中,通过放置最少的暖炉节点覆盖整个树。暖炉可以覆盖其父节点、子节点及自

D2510466299的博客 1070

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

二叉树问题总结

二叉树问题总结 相同的树 翻转二叉树 二叉树的最大深度 是否是平衡二叉树 二叉树直径 合并二叉树 对称二叉树 二叉树镜像 平衡二叉树

weixin_47676610的博客 1611

二叉树的常见问题

据结构中的重要性就不言而喻了,这儿简单记录一下自己碰到的一些关于二叉树的常见操作。当然要明确解决这些问题的“根节点思路”了————递归递归recursion。 二叉树的最大深度与最小深度 最大深度是指二叉树根节点到该树叶子节点的最大路径长度。而最小深度自然就是其到叶子节点的最小路径长度了。 **主要思路:**采用二叉树递归的思想,自底向上,当到达叶子节点时,自然达到了“递归边界”,而叶子节点的子...

子夜写字的地方 1869

二叉树路径问题模板总结

二叉树路径问题模板总结

m0_74795952的博客 1394

二叉树:利用二叉树的后序遍历解决部分树型动态规划问题

1. 算法流程 (4步) 2. 第二步中的3种情况 2.1 左子树怎样,右子树怎样,且左右子树间满足某种条件 2.2 讨论与x有关和与x无关两种情况 3. 第四步中的2种常用手法 4. 推广到解决n叉树

渐渐的忘记,赶不上明天(读研ing,2024年毕业) 417

二叉树路径和问题

问题一:二叉树中最大路径和(leetcode124) 问题描述: 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 大体思路: 其最大路径和有以下四种可能: 1) 由当前结点的左子树结点到右子树结点 2) 由当前结点到其左子树某一节点 3) 由当前结点到其右子树某一节点 4) 由当前结点本身 分析完可能性发现不能简单的返回当前结点的最大路径和,对于子节点是情况一而言,父节点拿到子结点的路径

gw_9527的博客 407

二叉树相关问题细谈递归

详解递归的概念及运用,用二叉树前中序遍历及节点个数引入,最后Leetcode题目单值二叉树,相同的树,翻转二叉树,对称二叉树详解帮您升华掌握。

qq_75270497的博客 410

二叉树的遍历方式和子问题思路

二叉树的遍历方式和子问题思路

Excuse_lighttime的博客 1606
上一篇: 快速找出素数
下一篇: 关于位运算
EncodedStar
博客等级 码龄10年 2614粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值