本題**於:606. 根據二叉樹建立字串。是乙個easy型別的題,但是卻對我們掌握遞迴思想有很大的幫助。
有人說,理解遞迴,首先要理解遞迴。。。可見遞迴思想並不是那麼直白,需要我們自己去理解。
遞迴就是乙個不斷呼叫自身的乙個過程,並且隨著遞迴深度增加,鎖解決的問題越來越小,當滿足遞迴終止條件之後,解決的小問題拼合成最終的結果。簡而言之,遞迴是乙個將問題化整為零,然後又化零為整的乙個過程。可以想象一下歸併排序的原理,就是這樣乙個過程。
先看一下題目描述:
你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。
空節點則用一對空括號 "()" 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。
示例 1:
輸入: 二叉樹: [1,2,3,4]
1/ \
2 3
/
4
輸出: "1(2(4))(3)"
解釋: 原本將是「1(2(4)())(3())」,
在你省略所有不必要的空括號對之後,
它將是「1(2(4))(3)」。
示例 2:
輸入: 二叉樹: [1,2,3,null,4]
1/ \
2 3
\ 4
輸出: "1(2()(4))(3)"
解釋: 和第乙個示例相似,
除了我們不能省略第乙個對括號來中斷輸入和輸出之間的一對一對映關係。
對於本題如何應用遞迴呢?我們可以將其化為5種簡單情況:
對於情況1,我們返回的顯然是 「」
對於情況2,我們返回的顯然是 node.val
對於情況3,根據示例1的規則,左非空的結論是node.val+"("+遞迴(node.left)+")";
對於情況4,我們得出的結論是:node.val+"("+遞迴(node.left)+")"+"("+遞迴(node.right)+")"
對於情況5,則和情況四相同,不過我們要做的不再是遞迴,而是返回整個字串。
於是,已經能夠將問題拆解為四種情形。只需要在遞迴**中實現就好了。
public string tree2str
(treenode t)
if(t.left==null&&t.right==null)
if(t.right==null)
//情況4、5
return t.val+
"("+
tree2str
(t.left)
+")("
+tree2str
(t.right)
+")"
;}
根據二叉樹建立字串
你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。空節點則用一對空括號 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。示例 1 輸入 二叉樹 1 2,3 4 1 23 4 輸出 1 2 4 3 解釋 原本將是 1 2 4 3 在你省略所有不必要的...
根據二叉樹建立字串
你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。空節點則用一對空括號 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。示例 1 輸入 二叉樹 1,2,3,4 1 23 4輸出 1 2 4 3 解釋 原本將是 1 2 4 3 在你省略所有不必要的空...
LeetCode 根據二叉樹建立字串(遞迴)
你需要採用前序遍歷的方式,將乙個二叉樹轉換成乙個由括號和整數組成的字串。空節點則用一對空括號 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。示例 1 輸入 二叉樹 1,2,3,4 1 2 3 4 輸出 1 2 4 3 解釋 原本將是 1 2 4 3 在你省略所有不必要...