zoukankan      html  css  js  c++  java
  • 50.序列化二叉树

    代码

    序列化二叉树

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
    
     // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        string res;
        dfs_s(root, res);
        return res;
    }
    
    void dfs_s(TreeNode* root, string &res){
        if(!root) {
            res += "null ";//如果当前节点为空,保存null和一个空格
            return ;
        }
        res += to_string(root->val) + ' ';//如果当前节点不为空,保存数字和一个空格
        dfs_s(root->left, res);
        dfs_s(root->right, res);
    }
    
    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) {
        int u = 0;  //用来保存当前的字符串遍历的位置
        //cout << "&u1="<< &u <<endl;
        return dfs_d(data, u);
    }
    
    TreeNode* dfs_d(string data, int &u){//这里的u是传的引用,不是值传递。这个u取地址,递归的时候所有u用的是同一个u
        //cout << "u="<< u<<" "<<"&u="<<&u <<endl;          //共用一段地址,共用一个变量
        if (u == data.size()) return NULL;  //如果已经达到了字符串的尾端,则退出。
        int k = u;
        //while循环取出下一个元素
        while(data[k] != ' ') k++; //k记录当前数字的位数如134是个三位数的数字,56是个两位数的数字,退出的时候,k指向了字符的中间的空格,所以回到下个字符的首部需要加1.
    
        if(data[u] == 'n') {//如果当前字符串是“null”
            u = k+1;//回到下一个数字的首部,注意是u = k+1, 不是u = u+1;把空格去掉
            return NULL;//表示这次构造的是一个null节点,并没有孩子节点,所以跳过后面的递归
        }
        int val = 0;
        //如果数字是负的
        if(data[u] == '-'){
             for (int i = u+1; i < k; i++) val = val * 10 + data[i] - '0';
             val  = -val;
        }
        else{
        //如果是数字是正的
            for (int i = u; i < k; i++) val = val * 10 + data[i] - '0';
        }
        u = k + 1;//回到下个数字的首部
        //递归算法总是先写退出条件,然后才递归调用。
        auto root = new TreeNode(val);
        root->left = dfs_d(data, u);
        root->right = dfs_d(data, u);
        return root;
    }
    
    };

     

    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    linux试题
    linux常用脚本
    nagios
    lvs/nginx/haproxy 负载均衡优缺点分析讲解
    一次SSLPeerUnverifiedException,SSLHandshakeException问题的分析
    [转]【安卓笔记】AsyncTask源码剖析
    linux下查看进程占用端口和端口占用进程命令
    which framework or library is best to use WebRTC
    [转]svn diff 替代工具
    [转]使用Subversion进行版本控制
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12316231.html
Copyright © 2011-2022 走看看