劍指offer 序列化二叉樹

2021-09-29 18:09:34 字數 1023 閱讀 6688

宣告:本文參考了《劍指offer》一書

上面的二叉樹序列化之後為「1,2,4,$,$,$,3,5,$,$,6,$,$」 

思路:

上面的例子是按照前序遍歷的方法來序列化二叉樹的,如果節點存在就輸出節點的值,如果節點不存在就輸出"$"

**1:

struct binarytreenode

;void serialize(binarytreenode* proot, ostream& stream)

stream << proot->m_nvalue << ",";

serialize(proot->m_pleft, stream);

serialize(proot->m_pright, stream);

}

接著怎麼根據序列來反序列化二叉樹呢,首先序列的首節點是二叉樹的根節點1,而2是1的左子節點,4又是2的左子節點,由於4後面緊跟的是$ $說明4沒有左右子節點,為葉子節點,接著回到2的右節點,發現序列對應的還是$,說明2沒有右孩子;那麼又回到了1的右節點,序列對應的是3,而5是3的左子節點,5後面又是$ $說明5是葉子節點;接著回到3的右子節點,發現對應的是6,6後面又是$ $說明6為葉子節點,按照這個思路就可以遞迴地重建二叉樹了。

**2:

void deserialize(binarytreenode** proot, istream& stream)

}bool readstream(istream& stream, int* number)

bool isnumeric = false;

if (i > 0 && buffer[0] != '$')

return isnumeric;

}

注意:要去補一補istream的知識

劍指offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。首先得理解題目的意思,序列化就是返回乙個帶有 和逗號的字串。反序列化就是根據帶有 和逗號的字串返回一棵二叉樹。比如對於二叉樹 1 2 3 4 5 6 7來講,序列化的結果是1,2,3,4,7,5,而反序列化的結果則是輸出一棵二叉樹。public cla...

劍指Offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 根據前面的面試題重建二叉樹,我們知道可以從前序遍歷和中序遍歷構造出一棵二叉樹。受此啟發,我們可以先把一棵二叉樹序列化成乙個前序遍歷序列和乙個中序序列的結合,然後再反序列化時通過這兩個序列重構出原二叉樹。但是這個思路有兩個缺點。乙個缺點是該方法要求二叉樹...

劍指offer 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹 首先這道題目是要有兩個問題,第乙個是把一棵二叉樹按照前序遍歷的方式變成乙個字串。第二個是把乙個字串變成乙個二叉樹。對於第乙個問題來說,我們要對這棵樹進行乙個前序遍歷,按照中左右的方式放入列表中,如果節點為空,則插入 最後.join 來實現列表到字串的轉...