zoukankan      html  css  js  c++  java
  • 剑指offer——序列化二叉树

    序列化二叉树

    请实现两个函数,分别用来序列化和反序列化二叉树

    在序列化二叉树时,可以使用二叉树遍历的递归版本,也可以使用迭代版本,而且先序遍历,中序遍历,后序遍历和层序遍历都可以实现,但是在进行反序列化时,本来用二叉树中序遍历实现的序列化,不会反序列化回来,可能是我功力不够吧,现在只会先序遍历的反序列化

    目前知道到的有先序遍历层序遍历两种实现方案

    import java.util.Queue;
    import java.util.LinkedList;
    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        String Serialize(TreeNode root) {
            if(root == null) return "#_";
    
            String str = root.val + "_";
            str += Serialize(root.left);
            str += Serialize(root.right);
            return str;
        }
        TreeNode Deserialize(String str) {
            if(str == null || str.length() == 0) return null;
            String[] strs = str.split( "_" );
            Queue<String> queue = new LinkedList<>();
            for(int i = 0; i < strs.length; i++){
                queue.offer( strs[i] );
            }
            return reConstructTree(queue);
        }
    
        TreeNode reConstructTree(Queue<String> queue) {
            String str = queue.poll();
            if("#".equals(str)) {
                return null;
            }
            TreeNode node = new TreeNode(Integer.valueOf(str));
            node.left = reConstructTree( queue);
            node.right = reConstructTree( queue);
            return node;
        }
    }
    

      

  • 相关阅读:
    +1和*2
    线段树(区间最大值和最大值的个数)
    CodeForces
    莫队算法入门(暴力而不失优雅)
    二分迷宫
    全错排公式
    C++ PAT乙 1051. 复数乘法 (15)
    C++ PAT乙 1070. 结绳(25)
    C++ PAT乙 1080. MOOC期终成绩 (25)
    C++ PAT 1073. 多选题常见计分法(20)
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/9019663.html
Copyright © 2011-2022 走看看