如果要使用遞迴的想法:以尋找當前的節與左右兩邊子樹最大的路徑,可以找到通過該節的最大路徑。
如果要住上傳,那會是左右或零取大者加自身再上傳。
因此遞迴函數要有兩種:
1.回傳值是到該點的最大路徑。
2.由1.得到左右最大的路徑,去計算通過該點的最大路徑。
Python
class Solution: def maxPathSum(self, root: TreeNode) -> int: self.result = root.val def dfs(node): if not node: return 0 rsum = dfs(node.right) lsum = dfs(node.left) maxPath = node.val+max(0, rsum, lsum) self.result = max(maxPath, node.val+lsum+rsum, self.result) return maxPath dfs(root) return self.resultC#
public class Solution { public int result; public int MaxPathSum(TreeNode root) { result = root.val; dfs(root); return result; } public int dfs(TreeNode node) { if(node is null){return 0;} var values = new int[2]; int rsum = dfs(node.right); int lsum = dfs(node.left); values[0] = Math.Max(node.val + rsum, node.val + lsum); values[0] = Math.Max(node.val, values[0]); values[1] = node.val + lsum + rsum; result = Math.Max(Math.Max(values[0],values[1]),result); return values[0]; } }