折纸的折痕(RVL中序遍历)
这个题我见到过不止一次。笔试面试。你拿个纸折一折会发现是这样的:这棵树左子树是纸的下半部分,右子树是纸的上半部分。下折痕指的是折痕突起的方向是纸的背面。可以看出折痕是一棵满二叉树,根节点是下折痕,每一棵子树的左孩子是上折痕,每一棵子树的右孩子是下折痕。从纸的上面到下面打印就是二叉树的RVL(右根左)的遍历。对折N次就是指N层节点。/*** 请把纸条竖着放在...
·

这个题我见到过不止一次。笔试面试。
你拿个纸折一折会发现是这样的:

这棵树左子树是纸的下半部分,右子树是纸的上半部分。
下折痕指的是折痕突起的方向是纸的背面。
可以看出折痕是一棵满二叉树,根节点是下折痕,每一棵子树的左孩子是上折痕,每一棵子树的右孩子是下折痕。
从纸的上面到下面打印就是二叉树的RVL(右根左)的遍历。
对折N次就是指N层节点。
/**
* 请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展开。
* 此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;
* 突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,
* 对折N次。请从上到下计算出所有折痕的⽅向。
* 给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",
* 若为上折痕则为"up".
* <p>
* 从纸的上面到下面打印就是二叉树的RVL(右根左)的遍历。
*
* @param n
* @return
*/
public static String[] foldPaper(int n) {
List<String> result = new ArrayList<>();
fold(1, n, "down", result);
return result.toArray(new String[result.size()]);
}
private static void fold(int level, int n, String type, List<String> result) {
if (level <= n) {
//R
fold(level + 1, n, "down", result);
//V
result.add(type);
//L
fold(level + 1, n, "up", result);
}
}
「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!
更多推荐
所有评论(0)