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;
        }
    }
    

      

  • 相关阅读:
    3.1C#中的命名空间
    2章总结
    2.4冒泡排序
    2.3 C#中的数组
    2.2二重循环
    2.1c#中的循环语句
    1章总结
    docker内外数据拷贝
    搭建docker环境
    centos7 部署Apache的httpd服务器
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/9019663.html
Copyright © 2011-2022 走看看