劍指offer(59)按之字形順序打印二叉樹
題目描述
請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。
題目分析
這道題還是需要畫圖分析,不然不好找規律。
正常的廣度遍歷的話,都是同樣的順序,從左到右,而我們要在廣度遍歷的基礎上改造為之字形遍歷。
也就是我們需要在奇數行從左至右,在偶數行從右至左,因為是先進後出,分析可得我們需要的數據結構是棧。
為了避免順序錯誤,我們需要的不只是一個棧,而是兩個棧,這個大家畫圖研究下就能想到。
兩個棧是這麽用的,這個棧保存這一行的數據,另一個棧保存下一行的數據,然後一行打印完後交替。
當然也有人是在廣度遍歷的基礎上加個臨時數組,然後對偶數行的數據reverse也可以做,但是我覺得reverse效率太低,所以就不打算寫這種方法了。
代碼
待更新
劍指offer(59)按之字形順序打印二叉樹
相關推薦
劍指offer(59)按之字形順序打印二叉樹
eve 就是 是我 數據結構 rev 其他 正常的 正常 nbsp 題目描述 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 題目分析 這道題還是需要畫圖分析,不然不好找規
59、劍指offer--按之字形順序打印二叉樹
print 題目 一個棧 wrap offer 二叉 原因 treenode 只有一個 題目描述 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 解題思路:通過分析,使用棧
劍指Offer——按之字形順序打印二叉樹
打印二叉樹 sta cnblogs 我們 pre 方便 pri == stack 題目描述: 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 分析: 我們都知道二叉樹的層次遍歷
劍指offer61 按之字形順序打印二叉樹
push_back 打印 pre logs cto pan 順序 code pty 另一種自己寫的解法 class Solution { public: vector<vector<int> > Print(TreeNode* pRoot)
59按之字形順序打印二叉樹
left print nbsp else array flag oot ret add 題目描述 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。 需要2個桟(後進先出)。 我
按之字形順序打印二叉樹
public 控制 num return res class imp comment 記得 http://blog.csdn.net/qq_27703417/article/details/70977347 請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的
劍指offer系列——刪除連結串列中重複的結點,二叉樹的下一個結點,對稱的二叉樹
刪除連結串列中重複的結點 題目描述 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 解題思路:
劍指offer{面試題23:從上往下列印二叉樹}
簡單的二叉樹層序遍歷,利用佇列的先進先出結構 關於層序遍歷層序遍歷 貼程式碼 public class Test23 { /** * 二叉樹的樹結點 */ public static class BinaryTreeNode { int
劍指Offer面試題:21.從上到下列印二叉樹
一、題目:從上到下列印二叉樹 題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如輸入下圖中的二叉樹,則依次打印出8、6、10、5、7、9、11。 二叉樹節點的定義如下,採用C#語言描述: public class BinaryTreeNode
(劍指offer)按之字形順序列印二叉樹
時間限制:1秒 空間限制:32768K 熱度指數:124380 題目描述 請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。 思路 BFS。每次取出佇列中所有節點,也就是樹的一層 i
劍指offer(五)之 用兩個棧實現佇列
題目描述 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 思路 個人的笨方法根大神的比還是差很多。。。 大神的方法:stack1用於push ,stack2 用於pop。分析pop的話,當stack2空了,那麼要把stack1的資料搬過去。s
劍指offer(三)之從尾到頭列印連結串列
題目描述 輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。 程式碼 /** * public class ListNode { * int val; * ListNode next = null; * * L
劍指offer(一)之二維陣列中的查詢
題目描述 在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 思路: 思路來源討論。。。 由於從上至下遞增,從左至右遞增 假定當前位置
劍指offer(四)之 重建二叉樹
題目: 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 思路: 前序遍歷: 根左右 中序遍
劍指Offer(書):替換空格
amp class har 補充 buffer space style col new 題目:請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之後的字符串為We%20Are%20Happy。 分析:通常來說,這樣
劍指Offer(書):重建二叉樹
中序 span 問題 找到 div 節點 left 假設 array 題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,
劍指Offer(書):數值的整數次方
== 浮點 int pow while 註意 ble double amp 題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 分析: * 要註意以下幾點:* 1.冪為負數時,base不能為0,不然求的時候是
劍指Offer(書):調整數組順序使奇數位於偶數前面
clas off 劍指offer col 數組 lse 整數 lag true 題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 public v
劍指Offer(書):反轉鏈表
col after 分析 listnode head tno eve offer 開始 題目:輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。 分析:要分清他的前一個節點和後一個節點,開始的時候前節點為null,後節點為head.next,之後,反轉。 public
劍指Offer(書):順時針打印數組
變量 每一個 while lis out args turn rgs i++ 題目:輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數