劍指offer 面試題37 序列化二叉樹

2021-10-04 05:48:06 字數 949 閱讀 1436

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

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

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

思路:把樹分為三部分,根,左子樹,右子樹。當序列化/反序列化根之後,再分別序列化/反序列化左、右子樹。大問題轉換為小問題,遞迴解決小問題。

**:

/*

struct treenode

};*/

class solution

str+=to_string(root->val)+"!";

serialize(root->left, str);

serialize(root->right, str);

}char* serialize(treenode *root)

treenode* deserialize(char** str)

int val=0;

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

treenode* pnode=new treenode(val);

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

return pnode;

else

++(*str);

pnode->left=deserialize(str);

pnode->right=deserialize(str);

return pnode;

}treenode* deserialize(char *str)

};

複雜度分析:時間複雜度為o(n),空間複雜度為o(1).

《劍指offer》面試題37 序列化二叉樹

思路 1.使用前序遍歷來序列化二叉樹,當碰到子節點為null的時候,用特殊字元 來表示。public class 37 serializebinarytrees 序列化 public string serialize treenode root private void serialize tree...

劍指Offer面試題37

這題的難點在於理解單鏈表中如果有第乙個公共節點,那麼其後的所有節點都重合。public class listnode public class solution 記錄它們的長度可以不用兩個輔助棧,讓長的先走,可以同時到鏈尾 int nlen1 getlistlength phead1 int nle...

面試題37 序列化二叉樹

題目 請實現兩個函式,分別用來序列化和反序列化二叉樹。演算法思想 根據前序遍歷規則完成序列化與反序列化。所謂序列化指的是遍歷二叉樹為字串 所謂反序列化指的是依據字串重新構造成二叉樹。依據前序遍歷序列來序列化二叉樹,因為前序遍歷序列是從根結點開始的。當在遍歷二叉樹時碰到null指標時,這些null指標...