• 剑指 Offer 37. 序列化二叉树


    剑指 Offer 37. 序列化二叉树

    题目

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

    你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

    思路

    序列化:将二叉树按照先序遍历的方式序列化为字符串,节点之间以逗号隔开,空节点表示为字符串 "NULL"。

    反序列化:因为是按照先序遍历进行序列化的,所以序列是按照根节点+左子树+右子树进行排列的,可以通过递归进行处理

    注意: 单纯的先序遍历是不能还原二叉树的,在序列化的时候一定要保存空节点!

    其他方法:待做。。。

    代码

    class Codec {
    public:
        // Encodes a tree to a single string.
        void encodes(TreeNode* root, string& str) {
            if (root == nullptr) {
                str += "NULL,";
                return;
            }
            str += to_string(root->val) + ",";
            encodes(root->left, str);
            encodes(root->right, str);
        }
    
        string serialize(TreeNode* root) {
            string ret;
            encodes(root, ret);
            return ret;
        }
    
        TreeNode* decodes(queue<string>& q) {
            if (q.front() == "NULL") {
                q.pop();
                return nullptr;
            }
            TreeNode* root = new TreeNode(stoi(q.front()));
            q.pop();
            root->left = decodes(q);
            root->right = decodes(q);
            return root;
        }
    
        // Decodes your encoded data to tree.
        TreeNode* deserialize(string data) {
            string str;
            queue<string> dataQueue;
            for (const auto& ch : data) {
                if (ch == ',') {
                    dataQueue.push(str);
                    str.clear();
                } else {
                    str += ch;
                }
            }
            return decodes(dataQueue);
            
        }
    };
    
  • 相关阅读:
    webpack初识
    Vue+ElementUi项目实现表格-单行拖拽
    promise/async与await 的执行顺序梳理
    MDN社区
    angularjs中的异步操作
    javascript中的字符串和数组的互转
    angularjs的练习题
    angularjs基础知识
    开发的两种方式
    ASP.NET中的HttpClient发送请求
  • 原文地址:https://www.cnblogs.com/huihao/p/16143429.html
Copyright © 2020-2023  润新知