序列化二叉樹

2021-10-09 23:36:54 字數 1620 閱讀 7916

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

二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點(#),以 ! 表示乙個結點值的結束(value!)。

二叉樹的反序列化是指:根據某種遍歷順序得到的序列化字串結果str,重構二叉樹。

例如,我們可以把乙個只有根節點為1的二叉樹序列化為"1,",然後通過自己的函式來解析回這個二叉樹

層次遍歷的方法

/*

struct treenode

};*/

class solution else

result.push_back(tmp);

que.pop();

}char* str = (char*)malloc(sizeof(char)*(result.size()+1));

for(int i = 0;ique1;

queueque2;

treenode* head = (treenode*)malloc(sizeof(treenode));

int val = (*str - '0'+256)%256;

head->val = val;

head->left = null;

head->right = null;

que1.push(head);

str++;

while(*str != '\0' && (!que1.empty() || !que2.empty()))

//構建樹

if(isleft == true)else

str++;

}isleft = true;

while(!que2.empty())

//構建樹

if(isleft == true)else

str++;}}

return head;

}};

前序遍歷的方法

/*

struct treenode

};*/

class solution

char tmp = root->val+'0';

vec.push_back(tmp);

serializehandle(root->left,vec);

serializehandle(root->right,vec);

}treenode* deserialize(char *str)

//反序列化

treenode* deserializehandle(char*& str)

treenode* node = (treenode*)malloc(sizeof(treenode));

node->val = ((*str)-'0'+256)%256;

str++;

node->left = deserializehandle(str);

node->right = deserializehandle(str);

return node;

}};

序列化二叉樹和反序列化二叉樹

題目描述 請實現兩個函式,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指 把一棵二叉樹按照某種遍歷方式的結果以某種格式儲存為字串,從而使得記憶體中建立起來的二叉樹可以持久儲存。序列化可以基於先序 中序 後序 層序的二叉樹遍歷方式來進行修改,序列化的結果是乙個字串,序列化時通過 某種符號表示空節點...

序列化二叉樹

問題 實現兩個函式,序列化乙個二叉樹。如果之前做過乙個題目 用一顆二叉樹的中序和前序還原二叉樹的話,最直觀的解法是用把二叉樹系列化成乙個中序序列和乙個前序序列,但是這個方法的缺陷是每個節點上的值不能相同,而且需要將整個序列都讀入之後才能序列化,如果序列到乙個流中,在從流中讀出來還原二叉樹效率將會比較...

序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 序列化思路 如果二叉樹的序列化是從根節點開始的話,那麼相應的反序列化在根節點的數值對出來的時候就可以開始了,因此我們可以根據前序遍歷的的根節點數值在讀出來的時候就可以開始了,因此我們可以根據前序遍歷的順序來序列化二叉樹,因為前序遍歷是從根節點開始的。當...