LeetCode總結,leetcode

來源:互聯網
上載者:User

LeetCode總結,leetcode
遍曆樹的資料結構中最常見的操作, 可以說大部分關於樹的題目都是圍繞遍曆進行變體來解決的。 一般來說面試中遇到樹的題目是用遞迴來解決的, 不過如果直接考察遍曆, 那麼一般遞迴的解法就過於簡單了, 面試官一般還會問更多問題, 比如非遞迴實現, 或者空間複雜度分析以及能否最佳化等等。 樹的遍曆題目在LeetCode中有以下幾個: 
Binary Tree Inorder Traversal
Binary Tree Preorder Traversal
Binary Tree Postorder Traversal
Binary Tree Level Order Traversal
Binary Tree Level Order Traversal II
Binary Tree Zigzag Level Order Traversal

樹的遍曆基本上分成兩種類型, 下面分別介紹: 

第一種是以圖的深度優先搜尋為原型的遍曆, 可以是中序, 先序和後序三種方式, 不過結點遍曆的方式是相同的, 只是訪問的時間點不同而已, 對應於Binary Tree Inorder Traversal, Binary Tree Preorder Traversal和Binary Tree Postorder Traversal這三道題目。 
在這種類型中, 遞迴的實現方式是非常簡單的, 只需要遞迴左右結點, 直到結點為空白作為結束條件就可以, 哪種序就取決於你訪問結點的時間。 
不過一般這不能滿足面試官的要求, 可能會接著問能不能用非遞迴實現一下, 這個說起來比較簡單, 其實就是用一個棧手動類比遞迴的過程, Binary Tree Inorder Traversal和Binary Tree Preorder Traversal比較簡單, 用一個棧來儲存前驅的分支結點(相當於圖的深度搜尋的棧), 然後用一個結點來記錄當前結點就可以了。 而Binary Tree Postorder Traversal則比較複雜一些, 儲存棧和結點之後還得根據情況來判斷當前應該走的方向(往左, 往右或者回溯)。 這裡就不列舉代碼細節, 有興趣的朋友可以看看具體題目的分析, 會更詳細一些。 
有時候非遞迴還是不能滿足面試官, 還會問一問, 上面的做法時間和空間複雜度是多少。 我們知道, 正常遍曆時間複雜度是O(n), 而空間複雜度是則是遞迴棧(或者自己維護的棧)的大小, 也就是O(logn)。 好了, 他會問能不能夠在常量空間內解決樹的遍曆問題呢? 確實還真可以, 這裡就要介紹Morris Traversal的方法。 Morris遍曆方法用了線索二叉樹,這個方法不需要為每個節點額外分配指標指向其前驅和後繼結點,而是利用葉子節點中的右null 指標指向中序遍曆下的後繼節點就可以了。 這樣就節省了需要用棧來記錄前驅或者後繼結點的額外空間, 所以可以達到O(1)的空間複雜度。 不過這種方法有一個問題就是會暫時性的改動樹的結構, 這在程式設計中並不是很好的習慣, 這些在面試中都可以和面試官討論, 一般來說問到這裡不會需要進行Morris遍曆方法的代碼實現了, 只需要知道這種方法和他的主要優劣勢就可以了, 有興趣知道實現的朋友可以看看具體題目的實現哈。 

另一種是以圖的廣度優先搜尋為原型的, 在樹中稱為層序遍曆, LeetCode中有三種自頂向下層序, 自底向上層序和鋸齒層序遍曆, 對應於Binary Tree Level Order Traversal, Binary Tree Level Order Traversal II和Binary Tree Zigzag Level Order Traversal。 
Binary Tree Level Order Traversal其實比較簡單, 代碼基本就是圖的廣度優先搜尋, 思路就是維護一個佇列儲存體上一層的結點, 逐層訪問。 而Binary Tree Level Order Traversal II則要從最後一層倒序訪問上來, 這個我沒有想到太好的方法, 現在的實現就是把Binary Tree Level Order Traversal得到的層放入資料結構然後reverse過來, 確實沒有太大的考核意義。 至於Binary Tree Zigzag Level Order Traversal因為每一層訪問順序有所改變, 而且是每次都反轉順序, 這讓我們想到棧的資料結構, 所以這裡不用隊列對於上層結點進行, 而改用棧來儲存, 就可以滿足每層反轉訪問順序的要求了。 

樹的遍曆是一個老生常談的題目, 不過仔細研究還是有一些考點的, 對於考查對資料結構和演算法的理解還是不錯的, 所以簡單的東西也得重視哈。
leetcode是什

裡面有很編程多面試的題目,可以線上編譯運行。難度比較高。如果自己能都做出來,對面大公司很有協助。我就是做的那裡的題目。
 
什叫部落格

blog的全名應該是Web log,中文意思是“部落格”,後來縮寫為Blog,而部落格(Blogger)就是寫Blog的人。從理解上講,部落格是“一種表達個人思想、網路連結、內容,按照時間順序排列,並且不斷更新的出版方式”。簡單的說部落格是一類人,這類人習慣於在網上寫日記。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.