LeetCode 演算法 二叉樹的直徑

2021-10-03 18:09:50 字數 1486 閱讀 3065

首先看題目

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。

示例

示例 :

給定二叉樹

1/ \ 2

3/ \

45

返回 3

, 它的長度是路徑 [4,

2,1,

3] 或者 [5,

2,1,

3]。注意:兩結點之間的路徑長度是以它們之間邊的數目表示。

解決思路

二叉樹的題目,第一時間想到的就是遞迴演算法。首先,根據題目要求,我們要取二叉樹中的最長路徑,其實也就是該二叉樹最長的節點鏈。既然是最長節點鏈,中間肯定有乙個節點是在轉折點上的,也就是這條最長節點鏈maxnodes的根節點。而我們的最長節點鏈maxnodes是由這個根節點的最長左子鏈和最長右子鏈拼接而成的,我們的路徑長度就是maxnodes-1。我們假設最長左子鏈節點數為left,最長右子鏈節點數為right;那麼我們的最長路勁節點數就是left+right+1。

**實現:

/**

* 求二叉樹路徑最大長度

* * @param root

* @author geyuxuan 2020-03-10 21:52:18

* @return int

*///設定全域性變數,記錄最達節點數

//設定為0的話,放入乙個空樹,返回為-1,所以設定為1

int maxnodes=1;

public

intdiameterofbinarytree

(treenode root)

/** * 遞迴演算法求當前節點的最大樹深度

* @param treenode

* @author geyuxuan 2020-03-10 23:33:27

* @return int

*/private

intdepth

(treenode treenode)

//計算左最長子鏈

int left =

depth

(treenode.left)

;//計算右最長子鏈

int right =

depth

(treenode.right)

;//計算當前節點的最大節點數

maxnodes= math.

max(maxnodes,left+right+1)

;//返回當前節點的最大樹深度

return math.

max(left,right)+1

;}static

class

treenode

}

不忘初心,砥礪前行。

leetcode 二叉樹 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...

LeetCode (二叉樹)反轉二叉樹

遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...

leetcode 二叉樹 二叉樹的層次遍歷

給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回其層次遍歷結果 3 9,20 15,7 方法一 遞迴 思路 比較訪問節點所在層次level和當前最高層次len levels 判定是否需...