折纸问题

1.问题叙述

 

2.分析:

           将对折后的纸翻过来,第一次对折产生的折痕为根节点,第二次对折产生的下折痕为为该节点的左子节点,上折痕为右子节点。

           所有得出结论:1.根节点为下折痕

                                     2.每个节点的左子节点为上折痕

                                     3.每个节点的右子节点为下折痕

 

public class PageTest{
    public static void main(String[] args) {
      Node<String> tree =creatTree(3);
      //打印树
        printTree(tree);
    }
    //通过模拟对折n次产生树
    public static Node<String> creatTree(int N){
        //定义根节点
        Node<String> root=null;
        for (int i=0;i<N;i++){
            //1.第一次对折
            if (i==0){
                root=new Node<>("down",null,null);
                continue;
            }
            //2.当前不时第一次对折
             //定义一个辅助队列,利用层次遍历的思想,找到叶子节点,添加节点
            Queue<Node> queue=new Queue<>();
            queue.insert(root);
            //循环遍历队列
            while (!queue.isEmpty()){
                //从队列中出一个节点
                Node<String> temp = queue.remove();
                //如果该节点的左子节点不为空,则把他的左子节点放入队列
                if (temp.left!=null){
                    queue.insert(temp.left);
                }
                //如果该节点的右子节点不为空,则把他的右子节点放入队列
                if (temp.right!=null){
                    queue.insert(temp.right);
                }
                //如果该节点的左右字节点都为空时,则创建左右字节点
                if (temp.left==null && temp.right==null){
                    temp.left=new Node<String>("down",null,null);
                    temp.right=new Node<String>("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);
        }
    }
    private static class Node<T> {
        T item;
        Node left;
        Node right;
        public Node(T item, Node left, Node right) {
            this.item = item;
            this.left = left;
            this.right = right;
        }
    }

}

 

posted @ 2020-03-28 14:13  撑起一片阳光  阅读(617)  评论(0编辑  收藏  举报