設計乙個演算法,並編寫**來序列化和反序列化二叉樹。將樹寫入乙個檔案被稱為「序列化」,讀取檔案後重建同樣的二叉樹被稱為「反序列化」。
如何反序列化或序列化二叉樹是沒有限制的,你只需要確保可以將二叉樹序列化為乙個字串,並且可以將字串反序列化為原來的樹結構。
樣例:
給出乙個測試資料樣例, 二叉樹,表示如下的樹結構:
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...