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));
  • 相关阅读:
    ViewData和TempData
    ASP.NET 缓存
    php配置的问题
    不错的文章
    谁能给个mvc的学习源码吗?
    win7下php + apache +mysql 5问题
    关于coolite grid 存储过程分页的问题,忘大虾解决...
    大侠们,关于asp.net与jsonp之间的东东
    jquery $.getjson $.post
    asp.net像博客园一样的Calendar(日期控件)
  • 原文地址:https://www.cnblogs.com/luntai/p/6906041.html
Copyright © 2011-2022 走看看