每日一題 leetcode 543 二叉樹的直徑

2021-10-07 20:29:53 字數 986 閱讀 4007

二叉樹的直徑

難度簡單397

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

示例 : 給定二叉樹

1

/ \2 3

/ \

4 5

返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]。

最長直徑。可能有三種情況、1.要麼在左子樹中 2.要麼在右子樹中 3.要麼經過根節點、

前兩者直接遞迴 求出最大值即可。但是第三種情況,我們需要儲存乙個變數。也就是當前遞迴的最大值。

至於最終返回的是max 而不是math.max(leftdepth,rightdepth)+1; 是因為max儲存的值最長直徑,而math.max(leftdepth,rightdepth)+1;儲存的只是當前節點的左右子樹的最大值+1。

時間複雜度為o(n)

空間複雜度為o(1)

private

int max =0;

//儲存最長直徑

public

intdiameterofbinarytree

(treenode root)

public

intdfs

(treenode root)

int leftdepth =

dfs(root.left)

;//遞迴左子樹長度

int rightdepth =

dfs(root.right)

;//遞迴右子樹長度

max = math.

max(leftdepth+rightdepth,max)

;//二者最大值

return math.

max(leftdepth,rightdepth)+1

;}

每日一題力扣543

給定一棵二叉樹,你需要計算它的直徑長度。一棵二叉樹的直徑長度是任意兩個結點路徑長度中的最大值。這條路徑可能穿過也可能不穿過根結點。class solution def diameterofbinarytree self,root treenode int self.ans 1 先定義最短的 至少為1...

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...