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

    序列化二叉树

    题目描述

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

    题意没明白, 想了半天, 明白题意又不知道怎么解, 又想了半天, 看了答案没懂, 又是半天, 哎...

    class Solution {
    public:
        void Serialize(TreeNode *root, string &str) {
            if (root == nullptr) {
                str += '#';
                return;
            }
           
            str += to_string(root->val);;
            str += ',';    // 用来分隔数字, 否则多位数字时没法区分
            Serialize(root->left, str);
            Serialize(root->right, str);
        }
        
        char* Serialize(TreeNode *root) {    
            if (nullptr == root)
                return nullptr;
            
            string str;    // 要保存的字符串
            Serialize(root, str);
            
            char *p = new char[str.length()+1];    // 多一个字符用来保存
            for (int i = 0; i < str.length(); i++) {
                p[i] = str[i];
            }
            p[str.length()] = '';
            return p;
        }
        
        TreeNode* Deserialize(char **str) {    // 使用二级指针用来移动str的位置
            if ('#' == (**str)) {
                (*str)++;
                return nullptr;
            }
            
            int num = 0;    // 字符串转数字
            while (('' != **str) && ((**str) != ',')) {
                num = num * 10 + (**str) - '0';    // 多位数字要乘10
                (*str)++;
            }
            
            TreeNode *root = new TreeNode(num);
            
            if(**str == '')    // 判断是否结束
                return root;
            else                 // 越过逗号分隔符
                (*str)++;
            
            root->left = Deserialize(str);
            root->right = Deserialize(str);
            return root;
        }
        
        TreeNode* Deserialize(char *str) {
            if (nullptr == str)
                return nullptr;
            TreeNode *ret;
            ret = Deserialize(&str);
            return ret;
        }
    };
    
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    
  • 相关阅读:
    python函数的基本语法<三>
    python函数的基本语法<二>
    python中文件的基础操作
    python模块——configparser
    python模块——psutil
    python中程序的异常处理
    python——协程
    hbuilder 开发app 自动升级
    C# datagridview 这是滚动条位置
    C# 小知识点记录
  • 原文地址:https://www.cnblogs.com/hesper/p/10560616.html
Copyright © 2011-2022 走看看