zoukankan      html  css  js  c++  java
  • 【LeetCode】297. Serialize and Deserialize Binary Tree

    二叉树的序列化与反序列化。

    如果使用string作为媒介来存储,传递序列化结果的话,会给反序列话带来很多不方便。

    这里学会了使用 sstream 中的 输入流'istringstream' 和 输出流'ostringstream'.

    istringstream in;

    in >> str;

    这里没执行一次就会倒出一个string (因为in流中使用了' '空格 作为分割符, 所以可以分成很多个string)

    建树的时候使用先序建立二叉树。

    关键代码如下:

    TreeNode* build(istringstream in){
      if(#) return null;
      else{
         new a node
         newnode -> left  = build(in)
         newnode -> right = build(in)
      }        
    }
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Codec {
    public:
    
        // Encodes a tree to a single string.
        string serialize(TreeNode* root) {
            ostringstream out;
            backtrack(root, out);
            return out.str();
        }
    
        // Decodes your encoded data to tree.
        TreeNode* deserialize(string data) {
            istringstream in(data);
            return build(in);
        }
        
    private:
        void backtrack(TreeNode *rt, ostringstream &out){
            if(rt){
                out << rt -> val << " ";
                backtrack(rt -> left, out);
                backtrack(rt -> right, out);
            }else{
                out << "#"<<" ";
            }
        }
        
        // 形如: 1 # 2 其中树节点必为满树空节点用#表示。中间用空格分割。
        TreeNode* build(istringstream &in){
            string str = "";
            in >> str;
            if(str == "#" || str == ""){
                return NULL;
            }else{
                TreeNode *rt = new TreeNode(atoi(str.c_str()));
                rt -> left = build(in);
                rt -> right = build(in);
                return rt;
            }
        }
    };
    
    // Your Codec object will be instantiated and called as such:
    // Codec codec;
    // codec.deserialize(codec.serialize(root));
  • 相关阅读:
    我就这么点时间,我该做些什么?
    如何排解压力
    渡过难关
    获得财富前,先问一下自己创造了什么
    程序员娶妻之道
    20150929雨
    我是小号
    tensorflow 源码编译tensorflow 1.1.0到 tensorflow 2.0,ver:1.1.0rc1、1.4.0rc1、1.14.0-rc1、2.0.0b1
    python大文件读取
    1《数学之美》第3章 统计语言模型
  • 原文地址:https://www.cnblogs.com/luntai/p/6906041.html
Copyright © 2011-2022 走看看