一张纸折叠N次,请从上到下打印所有的:凹凸折痕

提示:二叉树中序遍历的经典应用,也是曾经左神见过的Facebook的考试题


文章目录

  • 一张纸折叠N次,请从上到下打印所有的:凹凸折痕
    • @[TOC](文章目录)
  • 题目
  • 二、解题
  • 总结

题目

你亲手拿纸张准备干:

一张纸,折叠1次,你可以看见中间,有一个向下的凹的折痕。

从上到下打印折痕:凹(N=1)

连续折叠2次呢?你可以看见,在第一次凹折痕的上和下,分别新增一个凹折痕与凸折痕。

从上到下打印折痕:凹(2) 凹(1) 凸(2)
连续折叠3次呢?你可以看见,再第二次新增那俩凹凸折痕的各自上下,都会有新增一个凹,一个凸折痕。
自己拿纸张折叠你就知道了

从上到下打印折痕:凹(3) 凹(2)凸(3) 凹(1) 凹(3)凸(2)凸(3)

那么,一张纸折叠N次,请你从上到下打印所有的:凹凸折痕


二、解题

其实自己拿纸折叠一比,就知道
第N次折叠,出来的折痕
是在N-1次那俩新出的折痕的上下分别新增凹凸
与1–N-2次折叠的痕迹没关系

这个折痕完全和二叉树对上了【如果把节点x的左子,叫上边折痕,x的右子叫下边折痕】
N=1

N=2

N=3

发下了没,N递增过程中,沿着N-1层的节点,左右各自新增一个凹凸

中序遍历就是折叠痕迹:从上到下打印折痕:凹(3) 凹(2)凸(3) 凹(1) 凹(3)凸(2)凸(3)
咱不用先生成树,直接中序遍历模拟打印:

//N递增过程中,沿着N-1层的节点,左右各自新增一个凹凸public static void foldedPaperPrint(int N){//递归if (N == 0) return;System.out.println("N=" + N);foldPrint(1, N, true);//来到level=1层,最大N层,要打印的flagAo:是凹吗,第一次折叠为凹}//递归中序遍历打:来到level层,最大N层,要打印的flagAo:是凹还是凸,凹true,凸falsepublic static void foldPrint(int level, int N, boolean flagAo){if (level > N) return;//多了不行//模拟中序遍历打印--左头右foldPrint(level + 1, N, true);//左打印凹System.out.println(flagAo ? "凹" : "凸");//是打印凹吗?头打印foldPrint(level + 1, N, false);//右打印凸}public static void test2(){foldedPaperPrint(0);foldedPaperPrint(1);System.out.println("---------");foldedPaperPrint(2);System.out.println("---------");foldedPaperPrint(3);}public static void main(String[] args) {test2();}

结果自然明了:

N=1
凹
---------
N=2
凹
凹
凸
---------
N=3
凹
凹
凸
凹
凹
凸
凸

总结

提示:重要经验:

1)本题打印折叠痕迹,是经典的二叉树的应用,第一次见我就敏感地想到了
2)中序遍历模拟实现打印,不需要提前建树哦!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

一张纸折叠N次,请从上到下打印所有的:凹凸折痕相关推荐

  1. python折叠次数计算、一张纸5毫米_一张纸折叠多次后会怎样?计算机模拟得出,它能突破宇宙范围...

    在数学领域,有一个著名的故事,说的是有一位哲学家曾经对国王说:"亲爱的国王陛下,你能给我一粒小麦吗?每天你给我的小麦的颗粒的数量都是前一天的倍数,第一天给我一颗,第二天给我两颗,第三天给我四 ...

  2. JS-一张纸折叠多少次可达到珠穆朗玛峰的高度

    假设一张纸的厚度是0.1mm,通过多少次折叠可以超过珠峰8848m. <!DOCTYPE html> <html lang="en"><head> ...

  3. python一张纸折叠到珠峰高度_【舒展钱塘】课程故事:和纸做游戏

    和纸做游戏 --实验总园大二班课程故事 "我在玩,我不只是在玩.""玩"是孩子们的天性.孩子们在玩中学,在学中玩,身边的各种事物都能成为孩子们游戏时的道具. 纸 ...

  4. python一张纸折叠到珠峰高度_python实现seo疯狂外链发送工具

    网站外链发送工具 进来无事,抽空用python实现seo疯狂发送外链的工具.外链对网站优化来说是一个加分项,外链越多.质量越高这么对网站优化也越有利.通常网上有很多外链发送工具,其实是对各大网站平台插 ...

  5. 一张纸一直对折,按顺序打印

    请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开.此时折痕是凹下去的,即折痕突起的方向指向纸条的背面. 如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从 ...

  6. 微软面试题:打印折纸的折痕

    1.题目 请把一段纸条竖着放置在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开.此时折痕是凹下去的,即折痕突起的方向指向纸条的背面. 如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有 ...

  7. 一张纸厚度是多少毫米_一张纸的威力有多大?纸折103次捅破宇宙,理论荒诞却无法反驳...

    [图文摘自网络,如有侵权请联系删除] 人类达到月球需要多久时间?地球和月亮的距离不是一成不变的,它有着近地点和远地点,地球里月球最远的距离在363300千米,最远为405500千米. 而当年阿波罗号由 ...

  8. c语言指数爆炸月球,指数爆炸:一张纸对折103次后,将填满整个宇宙?

    一张纸能填满整个宇宙吗? 常见的A4纸厚度是0.104毫米,可观测宇宙的直径是930亿光年,虽然其外还有空间,但受限于每秒30万公里的光速,天文学家暂时只能看这么多. 在关于对折纸张的纪录里,美国人创 ...

  9. 折纸的折痕(RVL中序遍历)

    这个题我见到过不止一次.笔试面试. 你拿个纸折一折会发现是这样的: 这棵树左子树是纸的下半部分,右子树是纸的上半部分. 下折痕指的是折痕突起的方向是纸的背面. 可以看出折痕是一棵满二叉树,根节点是下折 ...

最新文章

  1. 谷歌大脑联手Hinton提出SimCLR新框架,疯狂提升自监督学习性能 | 北邮毕业生一作...
  2. Laravel之Eloquent ORM访问器调整器及属性转换
  3. Nginx允许跨域和禁止跨域操作
  4. 【MyBatis框架】MyBatis入门程序第一部分
  5. 我的NHibernate之路(1)---基本配置篇
  6. java 反射 私有成员_Java对类私有变量的暴力反射技术讲解
  7. 常用JavaScript的高级技巧
  8. 如何一键部署项目、代码自动更新
  9. 3秒搞定!~~ 一亿数据获取前100个最大值
  10. 优秀案例|如何让网页首屏更具视觉吸引力?
  11. web.config从.net framework3.5向4.0迁移注意事项
  12. 设置谷歌浏览器和Edge浏览器为黑色背景
  13. vs中opencv配置
  14. Ubuntu桌面图标无法打开终端的解决过程
  15. 二层交换机,三层交换机及四层交换机的区别
  16. 2019蓝桥杯本科B组C-C++决赛题 (题解随后出)
  17. html5 微网页 点餐_使用HTML5和微数据向网页添加电话号码
  18. python xlwt表格写入操作
  19. 2022-2028全球转定子均质机行业调研及趋势分析报告
  20. Ubuntu安装百度云盘

热门文章

  1. 智慧矿山GIS可视化运营管理平台解决方案
  2. 一个懒惰的人的自省书——请朋友们以我为戒,有更好的未来
  3. 【秋招/春招】投递岗位记录【快速法】
  4. 原文翻译 - 设计MongoDB架构的6条经验法则 - 6 Rules of Thumb for MongoDB Schema Design: Part 1
  5. 《网页中多媒体应用》
  6. c语言strtok函数完美实现
  7. 深入synchronized底层原理
  8. 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。
  9. 英文版 vs2010 做安装包
  10. 1623.闷声发大财