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

      

  • 相关阅读:
    【2020-05-17】人生十三信条
    【2020-05-16】评价与骄傲
    【2020-05-15】每天都充满向上的激情
    【04NOIP普及组】火星人(信息学奥赛一本通 1929)(洛谷 1088)
    next_permutation(全排列算法)
    【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)
    快速幂
    【03NOIP普及组】栈(信息学奥赛一本通 1924)(洛谷 1044)
    【06NOIP普及组】数列(信息学奥赛一本通 1937)(洛谷 1062)
    【00NOIP普及组】计算器的改良(信息学奥赛一本通 1910)(洛谷 1022)
  • 原文地址:https://www.cnblogs.com/walxt/p/12766674.html
Copyright © 2020-2023  润新知