【多次過】Lintcode 94. 二叉樹中的最大路徑和
阿新 • • 發佈:2018-11-07
給出一棵二叉樹,尋找一條路徑使其路徑和最大,路徑可以在任一節點中開始和結束(路徑和為兩個節點之間所在路徑上的節點權值之和)
樣例
給出一棵二叉樹:
1
/ \
2 3
返回 6
解題思路:
利用分治法 解決問題
需要一個變數不斷記錄帶有root點的路徑的最大值 curr_max 區域性變數
需要另一個變數記錄當前的最大路徑值 max 類變數
最後返回 當前的最大路徑值
思路:
有4種情況要考慮
left + root
right + root
root
left + right + root
不斷往上傳遞的值 只可能是 1, 2, 3中的一種
第四種情況只可能儲存在 max裡面 而不可能在 curr_max,因為第四種情況可能出現^這種的分支結構,如果向上傳遞就不能構成一條路徑。
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: An integer */ private int max = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { // write your code here helper(root); return max; } private int helper(TreeNode root){ if(root == null) return 0; //Divide int left = helper(root.left); int right = helper(root.right); //Conquer int curMax = Math.max(root.val, Math.max(left+root.val, right+root.val)); //root -> any max = Math.max(max, Math.max(curMax,left+root.val+right)); //any -> any return curMax; } }