二叉樹題型思考總結

2021-10-05 16:19:41 字數 1328 閱讀 5435

我們從兩道題出發總結二叉樹題型思考方向

題目很容易,講這道題是為了記錄一下寫遞迴函式的技巧

首先如果發現該題後序遍歷,自底向下返回子樹高度。那麼易解

class solution 

//函式作用:求子樹高度,不是平衡樹時返回-1

private int recur(treenode root)

}

但是如果沒想到怎麼辦呢?也是可以做的,我上面的**注釋就是沒想到順序的注釋,我們當成乙個遞迴問題即可

首先明確函式作用:求子樹高度(是平衡樹返回高度,不是返回-1),明確了之後我們假設函式已經寫完了,成為了乙個api了,接下來我們利用這個api寫完我們的函式。

寫函式時當作我們在處理乙個節點即可

1.終止條件,沒有節點子樹自然高度為0

2.調api得到left和right

3.根據left和right決定該節點返回值

乙個節點的處理寫完了,題目自然做出來了,最後在isbalanced方法裡面再最後調一次api求最大的乙個樹高度即可。

ps:如果思維老是會隨著遞迴一次次進去,再來個小技巧:取特殊情況,我們把樹想成是乙個兩層的二叉樹來寫**。畢竟人腦能堆幾個棧啊,兩層到頂了。

證明:想想就知道能求解兩層滿二叉樹的**原封不動就能求解任何樹,這就是這麼想正確的原因。

以該題提出思考總綱

兩個方向1.確定遍歷順序2.當作遞迴問題

先思考是先中後序那個?舉例易知節點需要左右子樹資訊則後序,節點不需要左右子樹資訊甚至能給左右子樹資訊則先序,中序同理。想清楚序後就直接套模板即可,稍微難點的題型無非是返回值是int。

想不出什麼序則換個方向,當作遞迴問題思考,如上題110所言

之前110用的第二個思考方向,這題可以嘗試使用第乙個:節點需要左右子樹資訊必然後序遍歷,套模板後序遍歷一遍所有節點,每個節點處檢查該節點的最大路徑和,取max即樹的最大路徑和,思考負擔更小。

下面**注釋思考了兩個方向

class solution 

//方向1:節點需要左右子樹資訊必然後序遍歷,套模板後序遍歷一遍所有節點,每個節點處檢查該節點的最大路徑和,取max即樹的最大路徑和

//方向2:函式作用:返回該節點為根的最大路徑和=左右之中的最大路徑+該節點值。注意實際最大路徑和還要考慮r.val + left + right,但是對於上一層這個路徑是不可能構成上一層的最大路徑的,所以返回時不返回這種可能

private int getmax(treenode r)

}

二叉樹題型彙總

題目描述 分別按照二叉樹先序,中序和後序列印所有的節點。輸入 返回 1,2,3 2,1,3 2,3,1 思路 建立返回vector,vector的0號元素放在左右子樹遍歷之前,vector1號元素放在左右子樹遍歷之間,vector2號元素放在左右子樹遍歷之後 class solution vecto...

二叉樹總結

二叉樹遍歷總結 已知一棵二叉樹的前根序序列和中根序序列,構造該二叉樹的過程如下 1.根據前根序序列的第乙個元素建立根結點 2.在中根序序列中找到該元素,確定根結點的左右子樹的中根序序列 3.在前根序序列中確定左右子樹的前根序序列 4.由左子樹的前根序序列和中根序序列建立左子樹 5.由右子樹的前根序序...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...