二叉樹的遍歷方式:
遞歸前中后序144,145,94
二叉樹:前中后序遞歸法?(opens new window)
迭代法通過隊列模擬102
求二叉樹的屬性
101是否對稱,左數的外側和右數的外側比較,左樹的內側和右樹的內側比較
104最大深度,DFS比較左數的最大深度和右樹的最大深度,二者取較大者
111二叉樹最小深度,后序遍歷,處理節點
222二叉樹節點個數,這道題跟104一樣做法
110.平衡二叉樹, 判斷左右子樹高度差
404.左葉子之和,必須三層約束條件,才能判斷是否是左葉子。
257.二叉樹所有路徑,遞歸+回溯,或者純遞歸,
513.找樹左下角的值,用層序遍歷
112路徑總和
二叉樹的修改與構造
226.翻轉二叉樹
? ? ?* 前后序遍歷都可以但中序不行,因為先左孩子交換孩子,再根交換孩子(做完后,右孩子已經變成了原來的左孩子),再右孩子交換孩子(此時其實是對原來的左孩子做交換)
106.中序與后序遍歷構造二叉樹
如通過中序與后序,首先找到后序數組最后一個數組為分割點,再以此分割點分割中序數組,這樣反復循環
654.構造最大二叉樹
同理106,要遍歷出最大的數字,然后以此為分割點,做區間分割
617.合并二叉樹
以其中一棵為主樹,把另一顆樹的數值加到主樹上去
求二叉搜索樹的屬性
700.二叉搜索樹中的搜索,尋找符合條件的目標節點,利用BST的特性,判斷往左走還是往右走。
98.驗證二叉搜索樹,遞歸中序遍歷,這道題不需要遍歷全樹,需要有一個前節點pre記錄值,將其值和當前節點cur的值進行比較
530.二叉搜索樹的最小絕對差,也是需要一個pre節點,每次計算當前節點root和pre節點的差值
501.二叉搜索樹的眾數,遞歸+中序遍歷,maxCount句記錄最大頻數,如果發現更大頻數,要更新maxCount,同時把新的rootValue添加到結果集中,這道題要注意可能有多個相等的眾數
538.?把二叉搜索樹轉換為累加樹,反中序遍歷,需要一個前節點pre。pre節點可以理解為當前節點root的孩子節點
二叉搜索樹的修改與構造
701.?二叉搜索樹中的插入操作,注意BST的有序性
450.?刪除二叉搜索樹中的節點,當root.val==val的時候,刪除節點分為多個情況,root左子樹不為空,右子樹為空;root右子樹不為空,左子樹為空;root的左右子樹都不為空,把root左子樹嫁接到root右子樹的最底層的最左邊
669.?修剪二叉搜索樹,刪除不在指定區間的節點,dfs前序遍歷,如果root(當前節點)的元素小于low的數值,那么應該遞歸右子樹,并返回右子樹符合條件的頭結點
108.?將有序數組轉換為二叉搜索樹,我們應該找到數組的中點,重點作為root節點,然后 遞歸構建root的左子樹和右子樹
二叉樹公共祖先問題
236.?二叉樹的最近公共祖先,遞歸后序遍歷,1.遞歸當前節點的左子樹和右子樹,2.處理遞歸邏輯,判斷在遞歸過程中是否存在left或者right為null,這個時候說明遞歸到頭了,要return
235.?二叉搜索樹的最近公共祖先,236的代碼可以copy過來,但是為了利用BST的特性,我們優化:將root.val分別于p.val和q.val進行比較,然后根據遞歸結果決定是遞歸左子樹還是右子樹