題目鏈結題目描述
給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過根結點。
示例 :
給定二叉樹1/
2 3/ \
4 5返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
注意:兩結點之間的路徑長度是以它們之間邊的數目表示。
關鍵技術
dfs 遞迴法
題目分析
樹的直徑=左子樹深度+右子樹深度;
經過乙個node,其左右子樹的最大深度之和 + 1(二叉樹的根節點深度為0)
使用 dfs,找出所有節點的最大直徑,再取出最大值 res;
定義乙個遞迴函式depth(node),呼叫depth函式,找出以 root 為根節點的二叉樹的最大深度
/**
* definition for a binary tree node.
* function treenode(val)
*//**
* @param root
* @return
*/var
diameterofbinarytree
=function
(root)
let left =
depth
(node.left)
;let right =
depth
(node.right)
; res = math.
max(res, left + right)
;return math.
max(left, right)+1
;}depth
(root)
;return res;
};
二叉樹 力扣刷題
把二叉樹上的每乙個節點的左右子節點進行交換 definition for a binary tree node.public class treenode class solution 給定乙個 完美二叉樹 其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下 struct node ...
力扣刷題 合併二叉樹
題目描述 給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。算是第一次正式用力扣刷題,思路上是有想法的,但回...
543 二叉樹的直徑 力扣
題意理解 求二叉樹從乙個葉子到另乙個葉子的路徑最大值,必然經過根節點 問題分析 遞迴先計算子樹的深度,然後用左右子樹深度和 1 其他最大子樹不一定經過根結點。可以是任意乙個子樹的最大直徑。鏈結int diameterofbinarytree treenode root void helper tre...