折纸问题

Posted kristse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折纸问题相关的知识,希望对你有一定的参考价值。

题目

请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。
给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。 例如:N=1时,打印: down ;N=2时,打印: down down up

解答

本质上就是将下面这棵二叉树按照 右 -> 中 -> 左 的顺序进行遍历;
技术图片

package nowcoder.easy.day04;  
  
/**  
 * 折纸问题 
 * @author GJXAIOU  
 * 将一棵头结点为 down,然后左孩子为 down,右孩子为 up 的二叉树按照 右、中、左顺序打印即可。 
 */
 public class PaperFolding {  
  
    public static void printAllFolds(int flodTime) {  
        printProcess(1, flodTime, true);  
    }  
  
    public static void printProcess(int i, int flodTime, boolean down) {  
        if (i > flodTime) {  
            return;  
        }  
        printProcess(i + 1, flodTime, true);  
        System.out.print(down ? "down " : "up ");  
        printProcess(i + 1, flodTime, false);  
    }  
  
    public static void main(String[] args) {  
        int N = 1;  
        printAllFolds(N);  
      System.out.println();  
        printAllFolds(2);  
      System.out.println();  
        printAllFolds(3);  
      System.out.println();  
        printAllFolds(4);  
    }  
}

程序运行结果

down 
down down up 
down down up down down up up 
down down up down down up up down down down up up down up up 

以上是关于折纸问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 中插入和删除行时模拟折纸

17: 折纸问题

折纸问题

50种折纸方法

算法21:折纸问题

关于折纸的动画