LeetCode 127 二叉樹中的最大路徑

2021-10-07 09:26:03 字數 1412 閱讀 5181

給定乙個非空二叉樹,返回其最大路徑和。

本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。

示例 1:

輸入: [1,2,3]

1/ \

2   3

輸出: 6

示例 2:

輸入: [-10,9,20,null,null,15,7]

-10/ \

9  20

/  \

15   7

輸出: 42

執行用時:40 ms, 在所有 c++ 提交中擊敗了84.13%的使用者

記憶體消耗:28.2 mb, 在所有 c++ 提交中擊敗了7.69%的使用者

class solution 

else return 0;

}public:

int maxpathsum(treenode* root)

};

1、果然還是要睡醒了才能解題。

2、這道題的難度為hard,對自己來說還是要花一些時間才能有思路

3、這道題的難點在於樹中任意兩個節點連線的路徑,獲得路徑中所有節點的和的最大值。

4、解題思路:

使用後根序遍歷,判斷左右子樹的節點的返回值情況。

這裡有乙個重點是某乙個節點的返回值和它的max_value的判斷值不一樣。

ret當前節點返回值,left表示左節點返回值,right表示右節點返回值,curval表示當前節點的值。

當前節點的返回值為:

ret = curval+max(left>0?left:0,right>0?right:0)
以當前節點為祖父節點所得到的最大值。

max_value = max(max_value,curval+(left>0?left:0)+(right>0?right:0))
第一次:節點-8   -8左右節點為空,分別返回0,max_value = max(max_value,-8+0+0);返回值為-8+max(0,0),//max_value = -8;

第二次:節點1    1左右節點為空 ,分別返回0,max_value = max(max_value,1+0+0);返回值為1+max(0,0),//max_value = 1;

第三次:節點9    左節點返回值-8,因為小於0,所以判斷為0,右節點返回值為1 max_value = max(max_value,9+0+1);返回值為9+max(1,0),//max_value = 10;

右邊一樣。。。。。。。。。。。。。一次類推得到結果

5、自己懂,感覺要記錄下來有點難,不知道該怎麼寫才好。

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之映象二叉樹(簡單 二叉樹)

問題描述 給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。遞迴 definit...