二叉樹解題思想

2022-08-24 04:45:10 字數 1647 閱讀 5195

引言
二叉樹本身就是使用遞迴而生成的,所以在解決相關問題的時候,首先是使用遞迴來做

但是因為演算法的時間和空間的問題,所以盡量將遞迴轉換為迭代來做。

遞迴解題思路
遞迴,就是在執行的過程中呼叫自己

構成遞迴需具備的條件:

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...