63.序列化二叉树

题目描述:

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

思路分析:

??序列化指的就是,将二叉树转化为字符串序列,反序列化指的就是将字符串转化为二叉树。我们可以用先序遍历将二叉树转化为字符串,遇见节点为空记做 #!,不为空记做 num!。同样的我们可以用先序遍历的方法重建二叉树。

代码:

import java.util.*;
/*
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 res="";
        res=res+root.val+"!";
        res=res+Serialize(root.left);
        res=res+Serialize(root.right);
        return res;
  }
    public TreeNode Deserialize(String str){
        Queue<String>q=new LinkedList<>();
        String []s=str.split("!");
        for(int i=0;i<s.length;i++){
            q.offer(s[i]);
        }
        return reconstructTree(q);
    }
    public TreeNode reconstructTree(Queue<String>q) {
        String s=q.poll();
        if(s.equals("#"))
            return null;
        TreeNode pRoot=new TreeNode(Integer.valueOf(s));
        pRoot.left=reconstructTree(q);
        pRoot.right=reconstructTree(q);
        return pRoot;
  }
}

原文地址:https://www.cnblogs.com/yjxyy/p/10961309.html

时间: 2024-10-09 12:22:06

63.序列化二叉树的相关文章

【剑指offer】序列化二叉树

题目链接:序列化二叉树 题意: 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先序.中序.后序.层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!). 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树. 题解:这个题就是前序遍历,序列化二叉树

序列化二叉树-剑指Offer

序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 思路 序列化就按先序遍历,遇到空指针也要存下来,递归调用,StringBuilder 反序列化是同样的递归调用,不过要考虑参数的传递,生成的TreeNode要返回 注意:对Sting[]的遍历,每次递归都要往后遍历一个字符,如果将这个位置信息point通过参数传入的话,就会造成函数无法正常遍历String[],此时,我们可以将位置信息设置为类的成员变量,每次递归时都要递增,这样既可满足条件 代码 /* public clas

剑指Offer——序列化二叉树

题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树 分析: 先序遍历可以用来序列化二叉树,序列化过程中,我们用"0xFFFFFFFF"表示结点为NULL. 反序列化便很简单,遇到"0xFFFFFFFF"就返回NULL,其他时候就直接产生一个结点. 代码: 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x

※剑指offer系列50:序列化二叉树

先来说一下什么是序列化二叉树,就是把二叉树转换成一串序列.反序列化就是将一串序列构造成一个二叉树. 这个题我也不是很懂,为什么要这样写 1 class Solution { 2 public: 3 vector<int> aux; 4 void treetovec(TreeNode * root) 5 { 6 if (!root)//空节点 7 { 8 aux.push_back(0xFFFFFFFF); 9 } 10 else { 11 aux.push_back(root->val)

剑指Offer对答如流系列 - 序列化二叉树

面试题37:序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 树的结构定义如下: public class Node { int val = 0; Node left = null; Node right = null; public Node(int val) { this.val = val; } } 问题分析 一般情况下,需要采用前/后序遍历和中序遍历才能确定一个二叉树,具体的内容我们之前探讨过 剑指Offer对答如流系列 - 重建二叉树 但是采用这种方式进行序列化

LeetCode 297.序列化二叉树 - JavaScript

题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法来实现二叉树的序列化与反序列化.这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构. 说明: 不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的. 序列化二叉树思路 使用广度优先(

50.序列化二叉树

代码 序列化二叉树 原文地址:https://www.cnblogs.com/make-big-money/p/12316231.html

剑指offer-37 序列化二叉树

剑指offer-37 序列化二叉树 题目: 思路: 自己解答: 这个有错误 public class Solution { String Serialize(TreeNode root) { if(root == null) return "#!"; StringBuilder bd = new StringBuilder(); serializeCore(root, bd); return bd.toString(); } private void serializeCore(Tre

37. 序列化二叉树

面试题37. 序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 你可以将以下二叉树: 1 / 2 3 / 4 5 序列化为 "[1,2,3,null,null,4,5]" /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }