• 每日一题 为了工作 2020 0424 第五十三题


    /**
     *
     * 【问题】
     *      二叉树的反序列化
     *      通过文件内容重建原来的二叉树
     * 【解析】
     *      把结果字符串str变成字符串类型的数组,记为values, 数组代表一棵二叉树先序遍历
     * 的节点顺序。例如, str= "l2!3!#!#!#!中,生成的values为["12","3","#","#","#"], 然后用
     * values[0 .. 4]按照先序遍历的顺序建立整棵树。
     * 1.遇到"12", 生成节点值为12的节点(head), 然后用values[l . .4]建立节点12的左子树。
     * 2.遇到"3", 生成节点值为3的节点,它是节点12的左孩子,然后用values[2. .4]建立
     * 节点3的左子树。
     * 3.遇到"#", 生成null节点, 它是节点3的左孩子,该节点为null, 所以这个节点没有后续建
     * 立子树的过程。回到节点3后, 用values[3. .4]建立节点3的右子树。
     * 4.遇到'#", 生成null节点, 它是节点3的右孩子,该节点为null, 所以这个节点没有后续建立
     * 子树的过程。回到节点3后, 再回到节点1, 用values[4]建立节点1的右子树。
     * 5.遇到"#",生成null节点, 它是节点l的右孩子, 该节点为null, 所以这个节点没有后续建
     * 立子树的过程。整个过程结束。
     *
     * @author 雪瞳
     * @Slogan 时钟尚且前行,人怎能再此止步!
     * @Function 实现树的反序列化
     *
     */
    

      

    public class ReSerival {
        /**
         * 讲树放入队列内 
         * @param string 输入字符串
         * @return 字符串转化成的队列
         */
        public static Node getTrueNode(String string){
           String regularExpression = "!";
           String[] values = string.split(regularExpression);
            Queue<String> queue = new LinkedList<>();
            for (int i=0;i != values.length;i++){
                queue.offer(values[i]);
            }
            return recover(queue);
        }
        public static Node recover(Queue<String> queue){
            Node head = null;
            String flag = "#";
            String value = queue.poll();
            if (flag.equals(value)){
                return head;
            }
            head = new Node(Integer.valueOf(value));
            head.left = recover(queue);
            head.right = recover(queue);
            return head;
        }
        public static void showTree(Node head){
            if (head == null){
                return;
            }
            System.out.println(head.value);
            showTree(head.left);
            showTree(head.right);
        }
        public static void main(String[] args) {
            String string = "12!3!#!4!#!#!#!";
            Node result = getTrueNode(string);
            showTree(result);
        }
    }
    class Node{
        public int value;
        public Node left;
        public Node right;
        public Node(int data){
            this.value=data;
        }
    }
    

      

  • 相关阅读:
    <!内容//>请问在CSS里面,这个符号是什么 意思?
    java.sql.Timestamp;
    struts做开发的时候action是继承Action方法还是ActionSupport方法
    @Autowired的用法和作用
    JavaScript方法和技巧大全
    Spring@Autowired注解与自动装配
    关于Class File Editor Source not found
    程序员:各种快捷键的用法及掌握 .
    Struts2的Preparable接口 .
    测试
  • 原文地址:https://www.cnblogs.com/walxt/p/12766674.html
Copyright © 2020-2023  润新知