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

Posted walxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 为了工作 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 0424 第五十三题的主要内容,如果未能解决你的问题,请参考以下文章

爱创课堂每日一题第五十三天- 哪些操作会造成内存泄漏?

每日一题 为了工作 2020 0325 第二十三题

每日一题 为了工作 2020 0315 第十三题

爱创课堂每日一题第五十九天- javascript继承的6种方法

爱创课堂每日一题第五十八天-javascript对象的几种创建方式

爱创课堂每日一题第五十二天- js延迟加载的方式有哪些?