【二叉树】折纸问题

把一张纸条从下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。再次对折, 每条折痕上方产生新的下折痕, 下方产生新的上折痕.alt
构建二叉树模型, 可以看出除根节点是下折痕外, 新的左子树都是下折痕, 新的右子树都是上折痕。

给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。即中序遍历二叉树。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		fold(1, N, true);
		System.out.println(sb.toString());
	}
	public static void fold(int i, int N, boolean isConcave) {
		if(i > N)
			return;
		fold(i + 1, N, true);
		sb.append(isConcave ? "down" : "up");
		sb.append("\n");
		fold(i + 1, N, false);
	}
}

posted @ 2022-02-10 23:04  brbrbr  阅读(119)  评论(0)    收藏  举报