91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++中如何實現樹節點的序列化與反序列化

c++
小樊
84
2024-08-24 03:33:37
欄目: 編程語言

在C++中實現樹節點的序列化與反序列化可以通過遞歸遍歷樹的節點來實現。以下是一個簡單的示例代碼:

#include <iostream>
#include <sstream>

using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

// 序列化樹
void serialize(TreeNode* root, ostringstream& out) {
    if (root) {
        out << root->val << " ";
        serialize(root->left, out);
        serialize(root->right, out);
    } else {
        out << "# ";
    }
}

// 反序列化樹
TreeNode* deserialize(istringstream& in) {
    string val;
    in >> val;
    if (val == "#") {
        return NULL;
    } else {
        TreeNode* root = new TreeNode(stoi(val));
        root->left = deserialize(in);
        root->right = deserialize(in);
        return root;
    }
}

int main() {
    // 構建一棵樹
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);

    // 序列化
    ostringstream out;
    serialize(root, out);
    string serialized_str = out.str();
    cout << "Serialized: " << serialized_str << endl;

    // 反序列化
    istringstream in(serialized_str);
    TreeNode* new_root = deserialize(in);

    // 輸出反序列化后的樹
    cout << "Deserialized: " << new_root->val << " " << new_root->left->val << " " << new_root->right->val << " "
         << new_root->left->left->val << " " << new_root->left->right->val << endl;

    return 0;
}

在上面的示例中,我們定義了一個TreeNode結構體表示樹節點,包含了節點的值和左右子樹指針。serialize函數用于序列化樹,采用先序遍歷的方式,將節點值以空格分隔的形式輸出到ostringstream對象中。deserialize函數用于反序列化樹,通過遞歸的方式構建樹節點,并返回根節點指針。在main函數中,我們構建了一棵樹,將其序列化后再反序列化,最后輸出反序列化后的樹節點值。

0
健康| 弥渡县| 来安县| 米易县| 望谟县| 英德市| 济南市| 开原市| 龙里县| 嫩江县| 乐至县| 阿坝| 淮阳县| 西乌| 南丰县| 泸州市| 屯门区| 霍州市| 通许县| 南乐县| 双牌县| 连平县| 咸宁市| 郸城县| 洛阳市| 绩溪县| 灌云县| 开原市| 绥德县| 天水市| 贡觉县| 浠水县| 社会| 沅江市| 长宁区| 盐山县| 乌海市| 旺苍县| 依兰县| 道孚县| 翁牛特旗|