引言二叉樹本身就是使用遞迴而生成的,所以在解決相關問題的時候,首先是使用遞迴來做,
但是因為演算法的時間和空間的問題,所以盡量將遞迴轉換為迭代來做。
遞迴解題思路遞迴,就是在執行的過程中呼叫自己。
構成遞迴需具備的條件:
1. 子問題須與原始問題為同樣的事,且更為簡單;
2. 不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。
要點:
1. 先確定自己要做的事情的最小單元,並以將其寫出來;
這是因為 子問題和原始問題是同樣的事情, 所以確定子事情,那麼原始問題也就確定了
2. 找出子問題的終止條件;
這是因為遞迴最終都是需要結束的,也就是返回乙個結果,所以你要確定最小單元需要返回什麼結果(return what)
以及他的結束條件是什麼。
3. 找出原始問題如何轉化 為子問題的條件方式:
這裡面一般就是 進入return a + b 的這種形式
別人的步驟:
找整個遞迴的終止條件:遞迴應該在什麼時候結束?
本級遞迴應該做什麼:在這一級遞迴中,應該完成什麼任務?
所以上述步驟總結為: 找出最小問題(我們只需要關注這一級的解決過程), 最小問題如何停止,大問題轉小問題;(程式設計的思想是自底層向上層編寫, 實現是從自上向下執行)
遞迴案例: 給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。實現**:/*** definition for a binary tree node.
* public class treenode
* } */
class
solution
private boolean preoder(treenode root, int sum,int
expect)
sum
+= root.val; // 1、最小單元,做的事情
if(root.left == null && root.right == null)
return preoder(root.left, sum, expect) ||preoder(root.right, sum , expect) ; ///3、 將大問題轉化為子問題}}
非遞迴思路演算法 二叉樹解題
給定乙個二叉樹,從左向右地,自底向上的遍歷每一層的元素。例 給定二叉樹 3 9 20 15 7 返回的結果 15,7 9,20 3 首先,要有乙個概念,無論是樹的題目還是圖的題目,解決的方式一般就是dfs或者是bfs,往裡面套就可以了。題目中提到要自底而上,但是這個其實問題不大,只要將自頂而上的列表...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...