二叉树中序遍历变型——折纸问题
2016-07-25 15:42
381 查看
题目描述
请把纸条竖着放在桌子上,然后从纸条的下边向上方对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的方向指向纸条正面的折痕叫做“上”折痕。如果每次都从下边向上方对折,对折N次。请从上到下计算出所有折痕的方向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".
测试样例:
n = 1
返回:["down"]
解析:按题意对折4次后看出规律:1代表down,0代表up。
对折第1次产生的折痕为:
1
对折第2次产生的折痕为:
1 0
对折第3次产生的折痕为:
1 0 1 0
对折第3次产生的折痕为:
1 0 1 0 1 0 1 0
可以看出,从最上方的折痕向下打印的过程为二叉树中序遍历的过程。
那么怎么根据二叉树的中序遍历写出该过程呢?
import java.util.*; public class FoldPaper { public String[] foldPaper(int n) { // write code here if(n <= 0) return null; int count=(1<<n)-1;//需要打印的次数为2^n-1。 String[] strs=new String[count]; int[] index={0}; print(1,n,true,strs,index);//由根节点开始遍历过程 return strs; } public void print(int level,int n,boolean flag,String[] strs,int[] index) { if(level > n)//level超出n的时候返回。 return; print(level+1,n,true,strs,index);//先递归左结点,并打印down strs[index[0]++]=(flag == true)?"down":"up";//打印本结点的值,并将index++ print(level+1,n,false,strs,index);//再递归打印右结点的值up; } }
相关文章推荐
- POJ 2386 Lake Counting
- 爹地,我找到了!,15个极好的Linux find命令示例
- 在开启DRS的集群中修复VMware虚拟主机启动问题
- nginx + tomcat 架构中,error_page错误页面的设置
- host文件设置详解
- SQL清除表格内容
- Android Studio Preview ”Rendering Problems“问题解决初探。
- PARDISO 5.0.0 Solver Project
- hdu5001 walk 【概率dp】
- 探索Javascript异步编程
- linux手贱操作
- 【Android之实践】monkeyrunner采用对象id,进行UI自动化操作
- hibernate注解整理
- leetcode 123. Best Time to Buy and Sell Stock III
- C++ PDFLib 8.0 中文输出
- Node.js EventEmitter
- virsh - brctl - common networking configurations used by libvirt
- spring中用p标签配置bean的属性
- POJ1002:487-3279 神奇的TLE
- Codeforces Round #364 (Div. 2) C. They Are Everywhere (窗口滑动)