有一颗二叉树,最大深度为D,且所有叶子的深度都相同,所有节点从上到下从左到右编号为,1,2,3,4 …… 2^D - 1 。在节点1处放一个小球,他会往下落。每个内节点上都有一个开关,初始全部关闭,当每次有小球落到一个开关上时,走后,开关的状态都会改变,如果节点的开关关闭,就往左走,否则往右走,直到走到叶子节点。
一些小球从节点1出开始下落,最后一颗小球会落到哪里呢?输入叶子深度和小球个数I,输出第I个小球最后所在的叶子编号。假设I不超过整棵树的叶子个数,D<=20 输入最多包含1000组数据
要点:
- 可不可以考虑用模拟做呢,显然是不行的,为什么,因为I最大可达2^20 - 1,在乘上19,则是最大走的层数,当然这仅仅只是一组数据,在1000组数据的基础上,显然会超时,因此要找规律
- 这道题有点描述不清楚,是,小球落后,走后,那个节点的状态再改变
以下列数如果层数 = 4 个数 = 8的情况下,走的路径
- 1 - 2 - 4 - 8
- 1 - 3 - 6 - 12
- 1 - 2 - 5 - 10
- 1 - 3 - 7 - 14
- 1 - 2 - 4 - 9
- 1 - 3 - 6 - 13
- 1 - 2 - 5 - 11
- 1 - 3 - 7 - 15
相信从这里面不难看出,如果是奇数球,会掉入左子树,而在左子树中,又有 i / 2 + 1 个球&