二叉树经典问题–折纸问题
请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。
实现
public class PagerFoldingTest {
public static void main(String[] args) {
Node<String> tree=createTree(2);
printTree(tree);
}
public static Node<String> createTree(int N){
Node<String> root=null;
for (int i = 0; i < N; i++) {
if(i==0){
root=new Node<String>("down",null,null);
continue;
}
MyQueue<Node> queue = new MyQueue<Node>();
queue.enqueue(root);
while(!queue.isEmpty()){
Node tmp = queue.dequeue();
if(tmp.left!=null){
queue.enqueue(tmp.left);
}
if(tmp.right!=null){
queue.enqueue(tmp.right);
}
if(tmp.left==null&&tmp.right==null){
tmp.left=new Node("down",null,null);
tmp.right=new Node("up",null,null);
}
}
}
return root;
}
public static void printTree(Node<String> root){
if(root==null){
return ;
}
if(root.left!=null){
printTree(root.left);
}
System.out.print(root.item+" ");
if(root.right!=null){
printTree(root.right);
}
}
public static class Node<T>{
public T item;
public Node left;
public Node right;
public Node(T item, Node left, Node right) {
this.item = item;
this.left = left;
this.right = right;
}
}
}