一套模板搞定二叉树算法题--二叉树算法讲解001
1、二叉樹定義
2、二叉樹存儲結構
2.1、經典題目代碼構建
代碼構建:
代碼對應的二叉樹的圖:
一行代碼搞定lettcode2236,運行通過;就是考察對二叉樹結構的理解:
3、深度優先遍歷DFS和廣度優先遍歷BFS概念
3.1、深入講解廣度優先遍歷BFS
樹的 廣度優先遍歷BFS 也可以稱之為層序遍歷
隊列基礎知識
4、萬能模板經典題
4.1、LeetCode102
4.2、LeetCode107
和102題相同的模板,代碼幾乎相同,只需要在最后一行用切片的寫法做一個反轉即可:
4.3、LeetCode103
題目:
題意:
題解:
只需要在模板的基礎上,添加一個Flag標志,標記從左往右或者從右往左即可。
4.4、LeetCode637
這連續幾道題,都提到二叉樹的 層 的概念,就可以很明顯的考慮到是要用層序遍歷 來做。
題目:
題意:
題解:
基于模板,最后添加元素處改一下,由添加層列表,即(每一層的所有節點),改為添加每一層所有節點的平均值即可。
4.5、LeetCode199
題目:
題意:
題解:
根據題意,實際上這道題問的是每一層 的最右邊的元素是什么?
所以還是涉及到層 的概念,還是要用層序遍歷 來做。然后再每一層取出最右邊的元素即可。
基于模板,只改一下最后的添加,由添加層列表,改為添加每一層的最后一個元素即可。
如果不用模板,不用層列表sublist,也可以修改為如下代碼:
這樣就不用額外的空間去存每一層的所有節點。只在每一層的最后一個節點去判斷,然后添加最后一個節點到總的列表。
這道題,不是一個明顯的層序遍歷的題,但是仔細分析題意,思路轉換,還是能結合層序遍歷模板來解題的。
4.6、LeetCode513
題目和題意:
題解:
基于模板,只需要改動最終的返回ans,ans的初始化由初始化為list改為初始化為root.val,即初始化為根節點的值。
ans的返回由添加層列表,改為添加層的左側第一個元素的值。
考慮內存空間的情況,可以進一步優化為如下代碼:
1和2都可以解決問題
1、
2、
4.7、LeetCode515
題目和題意:
題解:
模板改最后一行添加層列表的最大值即可。
4.8、LeetCode1161
題目和題意:
這個題目還是需要仔細讀一下的:
題解:
1、先解決層號的問題,輸出層號
2、題解完成:
考慮到節點值可能為負數的情況,最大層的和level_max_sum的初始化,由初始化為0改為初始化為負無窮-inf或者初始化為第一層的值root.val
對題解優化,盡量不要用標準sum函數api,因為它每次也要全部遍歷,比較耗時。
不用sum函數的修改版:
4.9、LeetCode101
題目和題意:
示例1
示例2
題解:
1、
2、題解1中還是有問題,滿足示例1圖的情況,但是不滿足示例2;
修改為如下代碼后,同時滿足示例1和示例2
4.10、LeetCode1302
題目:
題意:
最深的那層這里就是第四層的7和8、最深的那層的節點就一定是葉子節點。
題解:
修改 4.6、LeetCode513 中的代碼,將找左下角節點的值,改為求和即可。
不用sum函數的優化版:
5、總結
最核心知識點:
BFS與隊列的關系
leetcode102題引申出的萬能模板:
6、練習題
注:
文中截圖源自大佬: 閉著眼睛學數理化 課程內容
總結
以上是生活随笔為你收集整理的一套模板搞定二叉树算法题--二叉树算法讲解001的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 语言为什么建议多使用切片,少使用数
- 下一篇: 简易机器学习笔记(十)Windows下