二叉树小球下落问题c语言,#C++初学记录(树和二叉树)

二叉树的编号 例题 6-6 小球下落问题 有一棵二叉树,最大深度为D,且所有叶子深度都相同。所有节点从上到下,从左到右编号为1,2,3,4,....,2^D-1。在节点1处放置小球,他会往下落。每个节点上都有一个开关,初始全部关闭,每当有小球落到一个开关上时,状态都会改变,当一个小球到达节点时,如果该节点上的开关关闭则往左走,否则往右走,直到走到叶子节点,一些小球从节点1处开始依次下落。最后一个小球回到哪里呢?输入叶子深度D,小球个数I,输入第I个小球最后所在的叶子编号。假设I不超过整棵树的叶子个数,D<=20。输入最多包含1000组数据。 **get ** 4 2 3 4 10 1 2 2 8 128 16 12345 put 12 7 512 3 255 36358

#include

#include

const int maxd=20;

int s[1<

int main()

{

int D,I;

while((cin>>D>>I)==2)

{

memset(s,0,sizeof(s));

int k=1,n=(1<

for(int i=0;i

{

k=1;

for(;;;)

{

s[k]=!s[k];

k=s[k]?2*k:2*k+1;

if(k>n)break;

}

}

cout<

}

return 0;

}

代码非常基础不难理解,用k表示小球现在所在的节点位置再进行判断是否出界出界则跳出循环后进行下一步循环并且对k进行初始化,直到循环结束即第I个小球下落到底。

但是,这样做的代码有一个明显的缺陷,那就是时间复杂度问题,运算量太大,由于I可以高达2^D-1,每组测试数据下落总层数可能会高达(2^19)*19=9961472,并且一共可能有10000组数据。 还有一种方法我们可以这样理解,每个小球都会落到根节点上,并且前两个小球一定必然是一个落在左边子树上一个落在右边子树上,一般的,只需要看小球编号的奇偶性,就能直到他最终会在那棵子树中,对于那些落入根节点左子树的小球来说,只需要知道该小球是第几个落在根的左子树,就可以直到他下一步往左还是往右了,依次类推,直到小球落到叶子上为止。 如果使用题目中给的编号I,则当I是奇数时,他是往左走的第(I+1)/2个小球,当I是偶数时,他是往右走的第I/2个小球。这样,可以直接模拟最后一个小球的路线,实现代码:

while((cin>>D>>I)==2)

{

int k=1;

for(int i=0;i

if(I%2){

k=k*2;

I=(I+1)/2;

}

else

{

k=k*2+1;

I/=2;

}

cout<

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unique离散化用法

用法类似lower_bound,sort&#xff0c;不过下标从1开始的话和lower_bound减去的东西不一样 用来离散化很好用 pos就是在原数组a中的rank了&#xff0c;根据cnt建线段树啥的。。。 sort(a21, a21n);cnt unique(a21, a21n) - (a21);FOR(n) {int pos lower_bound(a21, a21cnt, a…

linux设备模型之kset/kobj/ktype分析

1. 概述今天来聊一下Linux设备模型的基石&#xff1a;kset/kobject/ktype。sysfs文件系统提供了一种用户与内核数据结构进行交互的方式&#xff0c;可以通过mount -t sysfs sysfs /sys来进行挂载&#xff1b;Linux设备模型中&#xff0c;设备、驱动、总线组织成拓扑结构&#x…

截取控件界面

介绍&#xff1a; 做项目中&#xff0c;遇到需要截取界面图形的内容&#xff0c;查找了所有的Graphics函数&#xff0c; 都没有此功能。只能用GDI32中的BitBlt来解决。应用需要调用的函数 class GDI32 { [DllImport("GDI32.dll")] public static extern bool BitB…

android 信号强度变化,Android监听WIFI网络的变化并且获得当前信号强度

MainActivity如下:package cc.testwifi;import android.os.Bundle;import android.app.Activity;/*** Demo描述:* 监听Wifi网络的变化并且获得当前信号强度***/public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {supe…

VLAN 路由实验图解

VLAN 路由实验图解(交换机为cisco1900系列)注&#xff1a;PC1&#xff1a;192.168.1.2 255.255.255.0PC2&#xff1a;192.168.2.2 255.255.255.0PC3&#xff1a;192.168.1.3 255.255.255.0PC4&#xff1a;192.168.2.3 255.255.255.0Fa0/0.1&#xff1a;192.168.1.1 255.255.255…

第 120 场双周赛 解题报告 | 珂学家 | 前后缀拆解 启发式合并

前言 忘名可以再记&#xff0c;回忆永不再来 整体评价 好像有一段时间没写周赛题解了&#xff0c;_. 感觉今天手感特别好&#xff0c;下午的几场比赛&#xff0c;包括传智杯都能打出超神战绩。 T3这题属于前后缀拆解&#xff0c;然后单调栈上二分(可以引入哨兵机制)&#xf…

音频系统,Alsa 里面的buff 是怎么计算的?

相关文章(干货)Ai音箱和Linux音频驱动小谈Linux ALSA 图解我在MTK平台下调试音频ALSA我们知道声音是模拟信号&#xff0c;模拟信号转成数字信号就一定有大小&#xff0c;既然有大小&#xff0c;那我们就需要开辟内存来保存这些数据。---- 我们知道&#xff0c;视频流的一帧就是…

android 多个启动页,Android启动页的问题整理

在一个方法一&#xff1a;设置起动模式一个Activity有四种启动模式&#xff1a;standard, singleTop, singleTask,singleInstance。standard: 标准模式&#xff0c;一调用startActivity()方法就会产生一个新的实例。singleTop:如果已经有一个实例位于Activity栈的顶部时&#x…

用一句话证明你是程序员,你会怎么说

这个文章没有正文突然想到的一个话题&#xff0c;感觉很有意思如果用一句话透露出你是一个程序员你会怎么表露自己了&#xff1f;留言偷偷告诉我&#xff1f;

新年来了,上海求职,路过看看

学历&#xff1a;信息管理专科&#xff0c;&#xff08;半个本科&#xff0c;今年才能毕业&#xff0c;自考&#xff09;出生&#xff1a;1980年2月IT技能&#xff1a;.net(C#)基本熟练掌握能理解多层构架&#xff0c;并运用到项目中去OOP思想基本掌握java略懂设计模式与UML入门…

Node.js mimimn图片批量下载爬虫 1.00

这个爬虫在Referer设置上和其它爬虫相比有特殊性。代码&#xff1a; // // mimimn图片批量下载Node.js爬虫1.00 // 2017年11月15日 //// 内置http模块 var httpsrequire("https");// 内置文件处理模块&#xff0c;用于创建目录和图片文件 var fsrequire(fs);// cheer…

空间换时间,查表法的经典例子

前言 上一篇分享了&#xff1a;C语言精华知识&#xff1a;表驱动法编程实践这一篇再分享一个查表法经典的例子。我们怎么衡量一个函数/代码块/算法的优劣呢&#xff1f;这需要从多个角度看待。本篇笔记我们先不考虑代码可读性、规范性、可移植性那些角度。在我们嵌入式中&#…

2005年度国产空间信息系统软件测评

基础平台软件&#xff1a; MapGIS7.0&#xff08;武汉中地信息工程有限公司&#xff09;SuperMapGIS5.0&#xff08;北京超图地理信息技术有限公司&#xff09;GeoStarGIS&#xff08;武汉吉奥信息技术有限公司&#xff09;桌面软件&#xff1a;SuperMap Deskpro&#xff08…

vs2019新建android生成app,VS2017 VS2019创建离线安装包

VS2017&VS2019创建离线安装包微软教程下载安装引导程序以下链接均来自微软官网创建安装包命令以VS2017专业版为例&#xff0c;VS2019自带.NET 4.7.2相关内容&#xff0c;可去除相关add项管理员CMD cd到vs_professional.exe所在目录# 全部组件&#xff0c;比较大不推荐&…

九个数的全排列(避免重复出现)

题意&#xff1a;http://www.51nod.com/onlineJudge/questionCode.html#!problemId1384 使用标准库里面的next_permutation()函数&#xff0c;这个函数是生成所有比当前的字符串大的字符串&#xff0c;所以最开始经过sort()排序之后&#xff0c;要先打印出当前的字符串。C STL中…

Linux内核系统架构介绍

28年前(1991年8月26日)Linus公开Linux的代码&#xff0c;开启了一个伟大的时代。这篇文章从进程调度&#xff0c;内存管理&#xff0c;设备驱动&#xff0c;文件系统&#xff0c;网络等方面讲解Linux内核系统架构。Linux的系统架构是一个经典的设计&#xff0c;它优秀的分层和模…

ESFramework介绍之(14)-- AS与FS通信方案

前面我们已经多次提到&#xff0c;每个AS都有一组FS为之服务&#xff08;回顾&#xff09;&#xff0c;AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理。下面我们将深入讨论AS和FS之间的通信机制。 首先要解决第一个问题&#xff0c;AS如何知道每个为之服务…

这道笔试题竟然运行不出错

#读者提供的面试题下面这张截图是一个读者在面试的时候遇到的题目&#xff0c;是哪个公司的我就不说出来了&#xff0c;我在微信朋友圈发了这个题目后&#xff0c;有几个好友给我留言说自己也写了这道题。题目&#xff1a;下面这段代码有什么问题&#xff1f;#后续然后我就用这…

android加号底部导航栏,EasyNavigation Android 底部导航栏████几行代码实现 Tab 导航(随意定制加号,带红点消息提示) @codeKK Android开源站...

几行代码轻松实现底部导航栏(Tab 文字图片高度随意更改)&#xff1b;中间可添加加号按钮&#xff0c;也可添加文字&#xff1b;(足够的属性满足你需要实现的加号样式)如果还不能满足、中间可添加自定义 View&#xff1b;Tab 中随意添加小红点提示、数字消息提示&#xff1b;点击…

ASP.NET 2.0新特性视频教程下载

这里是下载页面 这是Framework 2.0下面新特性的系统视频讲座,英文的,说话讲得很清楚音质不错,英文好的朋友有福了.包含以下这些主题: 数据访问 MasterPage与站点导航 成员与角色 用户配置文件与主题 Web Part与个性化 输出缓存与SQL数据库缓存 部分页面缓存 本地化 向导控件与页…