30 包含 min 函數的棧??馬上解題
題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的 min 函數。
代碼
31 棧的壓入、彈出序列??馬上解題
題目描述
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。
例如序列 1,2,3,4,5 是某棧的壓入順序,序列 4,5,3,2,1 是該壓棧序列對應的一個彈出序列,但 4,3,5,1,2 就不可能是該壓棧序列的彈出序列。
代碼
32.1 從上往下打印二叉樹??馬上解題
題目描述
從上往下打印出二叉樹的每個節點,同層節點從左至右打印。
例如,以下二叉樹層次遍歷的結果為:1,2,3,4,5,6,7
解題思路
使用隊列來進行層次遍歷。
不需要使用兩個隊列分別存儲當前層的節點和下一層的節點,因為在開始遍歷一層的節點時,當前隊列中的節點數就是當前層的節點數,只要控制遍歷這么多節點數,就能保證這次遍歷的都是當前層的節點。
代碼
32.2 把二叉樹打印成多行??馬上解題
題目描述
給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
代碼
32.3 按之字形順序打印二叉樹??馬上解題
題目描述
請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。
代碼
33? 二叉搜索樹的后序遍歷序列??馬上解題
題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。假設輸入的數組的任意兩個數字都互不相同。
例如,下圖是后序遍歷序列 1,3,2 所對應的二叉搜索樹。
代碼
34.1 二叉樹中和為某一值的路徑??馬上解題
題目描述
輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
下圖的二叉樹有兩條和為 22 的路徑:10, 5, 7 和 10, 12
代碼
34.2?路徑總和? 馬上解題
題目描述
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等于目標和。
說明:葉子節點是指沒有子節點的節點。
示例:給定如下二叉樹,以及目標和?sum = 22,返回?true, 因為存在目標和為 22 的根節點到葉子節點的路徑?5->4->11->2。
代碼
34.3?路徑總和??馬上解題
題目描述
給定一個二叉樹,它的每個結點都存放著一個整數值。找出路徑和等于給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過1000個節點,且節點數值范圍是 [-1000000,1000000] 的整數。
代碼
35. 復雜鏈表的復制??馬上解題
題目描述
輸入一個復雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果為復制后復雜鏈表的 head。
解題思路
第一步,在每個節點的后面插入復制的節點。
第二步,對復制節點的 random 鏈接進行賦值。
第三步,拆分。
代碼
36 二叉搜索樹與雙向鏈表??馬上解題
題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
代碼
37 序列化二叉樹??馬上解題
題目描述
請實現兩個函數,分別用來序列化和反序列化二叉樹。
代碼
38 字符串的排列? ?馬上解題
題目描述
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串 abc,則打印出由字符 a, b, c 所能排列出來的所有字符串 abc, acb, bac, bca, cab 和 cba。
代碼
?
39 數組中出現次數超過一半的數字??馬上解題
解題思路
多數投票問題,可以利用 Boyer-Moore Majority Vote Algorithm 來解決這個問題,使得時間復雜度為 O(N)。
使用 cnt 來統計一個元素出現的次數,當遍歷到的元素和統計元素相等時,令 cnt++,否則令 cnt--。如果前面查找了 i 個元素,且 cnt == 0,說明前 i 個元素沒有 majority,或者有 majority,但是出現的次數少于 i / 2 ,因為如果多于 i / 2 的話 cnt 就一定不會為 0 。此時剩下的 n - i 個元素中,majority 的數目依然多于 (n - i) / 2,因此繼續查找就能找出 majority。
代碼