• 每日一题 为了工作 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;
        }
    }
    

      

  • 相关阅读:
    Week2实验 B--爆零(❌)大力出奇迹(√) HDU
    Windows10家庭版安装Docker(不是DockerToolbox)
    Ubuntu搭建DNS服务器遇到的问题1
    Ubuntu执行apt-get时遇到的问题1
    Windows2000下vc++6.0编译出现“Error spawning cl.exe”
    win2000安装官方发布的最后一个补丁KB891861
    Windows2000密钥
    Linux下使用gets和puts方法出现的错误
    执行.sh文件调用变量时出现“未找到命令”
    SQL Server2012无法连接到服务器
  • 原文地址:https://www.cnblogs.com/walxt/p/12766674.html
Copyright © 2020-2023  润新知