1. 程式人生 > >劍指Offer-序列化反序列化二叉樹

劍指Offer-序列化反序列化二叉樹

一、前言

本系列文章為《劍指Offer》刷題筆記。

刷題平臺:牛客網

書籍下載:共享資源

二、題目

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

1、思路

這道題思路簡單,使用前序遍歷來序列化和發序列化即可。只要自己寫的程式格式對應上即可。可以使用$符號表示NULL,同時每個結點之間,需要新增逗號,即','進行分隔。

直接看程式碼即可。

2、程式碼

C++
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/classSolution{public:char*Serialize(TreeNode*root){if(!root){returnNULL;}stringstr;SerializeCore(root,str);// 把str流中轉換為字串返回intlength=str.length()
;char*res=newchar[length+1];// 把str流中轉換為字串返回for(inti=0;i<length;i++){res[i]=str[i];}res[length]='\0';returnres;}TreeNode*Deserialize(char*str){if(!str){returnNULL;}TreeNode*res=DeserializeCore(&str);returnres;}voidSerializeCore(TreeNode*root,string&str){// 如果指標為空,表示左子節點或右子節點為空,則在序列中用#表示if(!root
){str+='#';return;}stringtmp=to_string(root->val);str+=tmp;// 加逗號,用於區分每個結點str+=',';SerializeCore(root->left,str);SerializeCore(root->right,str);}// 遞迴時改變了str值使其指向後面的序列,因此要宣告為char**TreeNode*DeserializeCore(char**str){

相關推薦

offer》面試題39 二的深度(java)

設計模式 博客 rgs 歷史 存在 復制 pri 取值 今天 摘要: 今天翻到了《劍指offer》面試題39,題目二中的解法二是在函數的參數列表中通過指針的方式進行傳值,而java是沒有指針的,所以函數要進行改造。然而我翻了下別人的java版本(我就想看看有什麽高大上的改造

offer二十四之二中和為某一值的路徑

rgs one main java http ring dal offer for 一、題目   輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 二、思路 詳見代碼 三、

offer三十八之二的深度

ret terminal pro roo 結點 路徑 splay close solution 一、題目   輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 二、思路   遞歸,詳見代碼。 三、代碼

offer】7、重建二

nbsp treenode truct 遞歸函數 tar end || 部分 遍歷 題目 給出二叉樹的前序遍歷與中序遍歷結果,重建該二叉樹。 思路 由於前序遍歷的第一個數字是根節點,將中序遍歷分為左右子樹兩個部分。接下來就遞歸,將左子樹和右子樹的序列分離出來,然後調用遞歸函

Offer】操作給定的二,將其變換為源二的鏡像。

right 鏡像 tree style turn val 交換 實現 oot 二叉樹的鏡像定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11 鏡像二叉樹 8

offer 面試題8:二的下一個節點 c++

題目:給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。 解析:三種情況:1.若節點有右子樹,中序下一個就是 右子樹最左孩子節點  2.若無右子樹,且當前節點是父節點的左子節點,下一個就是父節點 &nb

offer 28: 對稱的二(遞迴實現)

題目 實現一個函式,用來判斷一棵二叉樹是不是對稱的。如果一顆二叉樹和它的映象一樣那麼它對稱。 分析 存在三種遍歷演算法,前序遍歷,中序遍歷,後序遍歷。我們可以針對前序遍歷定義一種對稱的遍歷演算法。即先遍歷父節點,再遍歷右結點,最後遍歷左結點。 以

offer】之字形列印二【python】

題目描述 請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。 在上一篇部落格中:層次遍歷,每一層在一行輸出中,只需要將奇數行的result反轉一下就行了 另外一種方法就是,需要反轉佇列的結果,

offer——(8)重建二&&二的深度

/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x)

offer:輸入一棵二,判斷該二是否是平衡二

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 //後續遍歷二叉樹,遍歷過程中求子樹高度,判斷是否平衡 class Solution { public: bool IsBalanced(TreeNode *root, int & dep){

offer{面試題25:二中和為某一值的路徑}

思路:這道題比較有意思,類似的題我在面試裡經常遇到過,圍繞著樹的深度遍歷和廣度遍歷做文章,針對這種型別的題,大家更多考慮的解決方案是遞迴,說白了二叉樹就是一群小二叉樹,上次做寶寶樹的筆試題的時候,出的演算法題就是求任意兩個節點之間的最遠距離,說白了還是遍歷的問題,回到這道題  &n

牛客網線上程式設計專題《offer-面試題39》二的深度

題目連結: 題目描述: 解題思路: 解法:遞迴的遍歷一棵數的左右子樹。 已經AC的程式碼: public class treeDepth39 { public class Tr

offer面試題八:二的下一個節點

題目描述: 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。 思路 1.若該節點存在右子樹:則下一個節點為右子樹最左子節點(如圖節點 B ) 2. 若該節點不存在右子樹:這時分兩

offer面試題7:重建二(java實現)

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果都不含重複的數字。例如:輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}則重建二叉樹:其中二叉樹的定義如下:  * publi

offer{面試題19 :二的映象}

public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

Offer面試題6 重建二

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入的前序遍歷序列{1,2,4,7,3,5,6,8}和後序遍歷序列{4,7,2,1,5,3,8,6},則重建出如圖所示的二叉樹 二叉樹結點定義如下:

offer{4-6}】重建二、用兩個棧實現佇列、旋轉陣列的最小數字

重建二叉樹、用兩個棧實現佇列、旋轉陣列的最小數字重建二叉樹題目描述C++程式碼題目描述C++程式碼題目描述C++程式碼 重建二叉樹 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹

offer:第25題二和為某一值得路徑

//思路:可以利用全路徑逐層遞減,在用遞迴來尋找路徑 import java.util.ArrayList; import java.util.List; public class _Test_25_2 { ArrayList<ArrayList

Offer 面試題34:二中和為某一值的路徑 Java程式碼實現

題目:輸入一棵二叉樹和整數,打印出二叉樹中節點值得和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。 解題思路:路徑從根節點開始,應該用類似於前序遍歷的方式訪問樹節點。

offer》把一棵二列印成多行

注:此部落格不再更新,所有最新文章將發表在個人獨立部落格limengting.site。分享技術,記錄生活,歡迎大家關注 題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 im