給定乙個非空二叉樹,返回其最大路徑和。
本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。
示例 1:
輸入: [1,2,3]
1
/ \2 3
輸出: 6
示例 2:
輸入: [-10,9,20,null,null,15,7]
-10/
9 20
/ 15 7
輸出: 42
對於任何乙個root而言有以下情況:
1.最大路徑中包括該root:那麼我們需要知道(1) left::從root的左子樹第乙個結點開始向下延伸可以達到的最大路徑(ps:包括左子樹第乙個結點,但是不一定要延伸到葉子結點)(2)right::root右子樹…(同(1)省略!!) 那麼包括該結點的最大路徑為left+root->val ,left+root->val+right,root->val+right,root->val 四個中的最大乙個
2.最大路徑中不包括該root點:題中說明了至少是要包括乙個結點的,如果是不包括該root點,那麼這個最大路徑就一定是在左子樹,或者右子樹內部,這個最大值在我們遞迴呼叫到左子樹(或者右子樹)的時候 已經被算過了,並且被存在了 total_max內;
ps:digui(treenode* root, int &total_max)函式返回的是從root開始(包括root)向下延伸可達的最大路徑(這個指的是單方向的!!!只是向左子樹或者向右子樹方向),total_max存的是,至少!!!!包含該結點可達到的最大路徑(這個路徑是可以多方向的,可以左右都延伸!!!)
int digui(treenode* root, int &total_max)
else return 0;
} int maxpathsum(treenode* root)
LeetCode 第124題 二叉樹的最大路徑和
本題可以對比左神演算法中的 二叉樹中的最遠距離,只不過最遠距離中沒有考慮權重的問題,本題需要考慮每個節點的權重問題,還是有所區別的。題目 給定乙個非空二叉樹,返回其最大路徑和。本題中,路徑被定義為一條從樹中任意節點出發,達到任意節點的序列。該路徑至少包含乙個節點,且不一定經過根節點。示例 1 輸入 ...
LeetCode第98題(驗證二叉搜尋樹)
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...
LeetCode第110題 平衡二叉樹
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,n...