Q37序列化二叉樹

2021-10-05 05:17:32 字數 1616 閱讀 2225

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

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

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

對於序列化:使用前序遍歷,遞迴的將二叉樹的值轉化為字元,並且在每次二叉樹的結點

不為空時,在轉化val所得的字元之後新增乙個』!'作為分割。對於空節點則以 『#』 代替。

對於反序列化:按照前序順序,遞迴的使用字串中的字元建立乙個二叉樹(特別注意:

在遞迴時,遞迴函式的引數一定要是char ** ,這樣才能保證每次遞迴後指向字串的指標會

隨著遞迴的進行而移動!!!)

/*

1. 對於序列化:使用前序遍歷,遞迴的將二叉樹的值轉化為字元,並且在每次二叉樹的結點

不為空時,在轉化val所得的字元之後新增乙個'!'作為分割。對於空節點則以 '#' 代替。

2. 對於反序列化:按照前序順序,遞迴的使用字串中的字元建立乙個二叉樹(特別注意:

在遞迴時,遞迴函式的引數一定要是char ** ,這樣才能保證每次遞迴後指向字串的指標會

隨著遞迴的進行而移動!!!)

*//*

struct treenode

};*/

class

solution

serial[len]

='\0'

;return serial;

}void

serializecore

(treenode *root, string & str)

str = str + std::

to_string

(root-

>val)

+'!'

;serializecore

(root-

>left, str)

;serializecore

(root-

>right, str);}

treenode*

deserialize

(char

*str)

void

deserializecore

(treenode*

* root,

char

**str)

}bool

scannumber

(char

** str,

int& num)

string numstr ="";

while

(*p!=

'\0'

&&*p!=

'!')if(

*p==

'!')

++p;

*str = p;

num =

atoi

(numstr.

c_str()

);return

true;}

};

面試題37 序列化二叉樹

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

面試題37 序列化二叉樹

請實現兩個函式,分別用來序列化和反序列化二叉樹。序列化 我們可以按照樹的前序遍歷的方式,將樹中的資料讀出放到乙個序列裡。這裡,對於結點是null的,也要表示出來,用以區分,這裡用 作為null結點,對於非null的結點,就取出它們的值放入序列,另外,各個值之間用,隔離開,方便區分。反序列化 根據前面...

面試題37 序列化二叉樹

題目 請實現兩個函式,分別用來序列化和反序列化二叉樹。如 將樹序列化為字串 1,2,3,null,null,4,5 還要將字串反序列化為二叉樹 序列化方法 用佇列進行層次遍歷,把結點乙個個加入到結果集中 反序列化方法 根據二叉樹結點之間的運算關係進行求解,若結點 cur 的下標為 x 那麼其左子結點...