折纸问题本质其实是二叉树的基础概念,如果把折痕改成二叉树结构,就会发现,打印的折痕顺序其实就是二叉树的中序遍历,如下图:
public static void printAllFolds(int n){
//首先从头结点出发,头结点是凹
process(1,n,true);
}
/**
* 思路:
* 1.当你来到一个节点,想象这个节点
* 2.这个节点在i层,总共N层,N固定不变
* 3.如果这个节点是凹的话,down = T
* 4.如果这个节点是凸的话,down = F
*
*/
public static void process(int i,int N,boolean down){
//通过分析知道,其实打印折纸顺序就是树的中序遍历
if(i>N)return;
process(i+1,N,true);
System.out.println(down?"凹":"凸");
process(i+1,N,false);
}
public static void main(String[] args) {
printAllFolds(3);
}