LintCode 7 二叉樹的序列化和反序列化

2021-07-27 00:08:02 字數 1434 閱讀 8592

設計乙個演算法,並編寫**來序列化和反序列化二叉樹。將樹寫入乙個檔案被稱為「序列化」,讀取檔案後重建同樣的二叉樹被稱為「反序列化」。

如何反序列化或序列化二叉樹是沒有限制的,你只需要確保可以將二叉樹序列化為乙個字串,並且可以將字串反序列化為原來的樹結構。

樣例:

給出乙個測試資料樣例, 二叉樹,表示如下的樹結構:

3 / \920

/ \

157輸入輸出

演算法要求:

解題思路:

需要了解什麼是二叉樹,其序列化和反序列化是什麼。這道題的序列化和反序列化都是用先序遍歷來進行的。首先,我們需要解析字串,提取出有用的部分,存在vector容器中,再利用create函式進行遞迴建立二叉樹。

本題的難點在於,解析字串和輸出字串的處理。

演算法如下:

public:

string serialize(treenode *root) ";

string temp = data.str();

string::iterator itstr;

itstr = temp.end();

itstr-=2;

//去除結尾多餘的,和#

while (itstr != temp.begin()) else

if (*itstr == ',') else

itstr--;

}return temp;

}treenode *deserialize(string data)

int start = data.find(' else

nums.push_back(tempstr);

while (end != -1) else

nums.push_back(tempstr);

}it = nums.begin();

treenode *root = creat(root);

return root;

}private:

vector

nums;

vector

::iterator it;

string serialize2(treenode *root)

data << root->val << ',';

data << serialize2(root->left);

data << serialize2(root->right);

return data.str();

}int stoi(string str)

treenode *creat(treenode *bt)

if (*it == "#") else

}

二叉樹最長連續序列 LintCode

描述 給一棵二叉樹,找到最長連續路徑的長度。這條路徑是指 任何的節點序列中的起始節點到樹中的任一節點都必須遵循 父 子 聯絡。最長的連續路徑必須是從父親節點到孩子節點 不能逆序 樣例 舉個例子 1 3 2 4 5最長的連續路徑為 3 4 5,所以返回 3。2 3 2 1最長的連續路徑為 2 3 而不...

LintCode 等價二叉樹

題目描述 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4 就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4就不是等價的。做題思路 本題給出的bool型別的函式來判斷二叉樹是否等價...

lintcode 等價二叉樹

1 題目 檢查兩棵二叉樹是否等價。等價的意思是說,首先兩棵二叉樹必須擁有相同的結構,並且每個對應位置上的節點上的數都相等。樣例 1 1 2 2 and 2 2 4 4就是兩棵等價的二叉樹。1 1 2 3 and 2 3 4 4就不是等價的。2 思路 對兩課二叉樹從以下幾種情況考慮 兩個均空,true...