1. 程式人生 > >劍指offer之序列化二叉樹

劍指offer之序列化二叉樹

1.題目描述

請實現兩個函式,分別用來序列化和反序列化二叉樹。 兩個函式分別是:

char* Serialize(TreeNode *root) {    
        
}
TreeNode* Deserialize(char *str) {
    
}

2.問題分析

系列化和反系列化都應該是一樣的遍歷方式,或者前序遍歷或者中序遍歷或者後序遍歷。但是為了方便,我們使用前序遍歷,第一個字元就是根節點。 序列化的時候,空節點我們使用’#‘來標誌,val直接我們使用’,'來分割。 反系列化的時候,因為遞迴的時候,str的值要相應改變,要麼使用char* &str或者char** str。 具體過程看程式碼。

3.原始碼

char* Serialize(TreeNode *root) {
    if(root == NULL)
        return "#";
    string value = to_string(root->val);
    value.push_back(',');
    char* left = Serialize(root->left);
    char* right = Serialize(root->right);
    
	//合併字串
    char* res = new char[strlen(left) + strlen(right)
+ value.size()]; strcpy(res,value.c_str()); strcat(res,left); strcat(res,right); return res; } TreeNode* decode(char* &str) { if(*str == '#') { ++str; return NULL; } int num = 0; while(*str != ',') num = 10 * num + *str++ - '0'; //跳過字元','
++str; TreeNode* root = new TreeNode(num); root->left = decode(str); root->right = decode(str); return root; } TreeNode* Deserialize(char *str) { return decode(str); }