序列化二叉樹

2021-08-22 16:14:27 字數 1803 閱讀 9578

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

思路:一開始根本沒明白序列化和反序列化是什麼意思,後來才明白,序列化就是把乙個二叉樹變成乙個位元組流,用『,』分隔結點,用『#』代替空結點,反序列化就是把這個位元組流重新生成乙個二叉樹。用前序遍歷就可以了。還有人用雙向佇列的,個人覺得挺巧妙的,避免了遞迴,把**也貼到下面了。

**:/*

struct treenode

};*/

class solution

treenode* deserialize(char *str)

treenode* des(char **str)

int num=0;

while(**str!='\0'&&**str!=',')

treenode* root = new treenode(num);

if(**str=='\0')

return root;

else

(*str)++;

root->left = des(str);

root->right = des(str);

return root;}};

雙向佇列:

classsolutionelse

q.pop_front();

}

}

char* chr = strdup(s.c_str());

returnchr;

}

treenode* deserialize(char*str)

}

returnret;

}

treenode* nextnode(char*str,int&i)

s += str[i];

i++;

}

if(str[i] ==' ')

i++;

if(!s.empty())

returnnewtreenode(stoi(s));

returnnullptr;

}

};

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

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

序列化二叉樹

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

序列化二叉樹

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