題目連接ide
題目大意:找出一個二叉樹中的最大路徑長度。這個路徑是從一個葉子結點到另外一個葉子結點的路徑長度。例子以下:spa
法一:DFS。因爲是左邊一個路徑到右邊一個路徑,通過中間的根鏈接點,所獲得的路徑和,因此能夠計算每一個根節點的左子樹和右子樹的最大路徑和,而後再從中選大者,再與其上一層進行比較。具體代碼以下(耗時2ms):code
1 //設爲全局,方便計算,由於最大值有多是中間路徑,因此若是隻是做爲參數返回的話,很差承接 2 int res = Integer.MIN_VALUE; 3 public int maxPathSum(TreeNode root) { 4 dfs(root); 5 return res; 6 } 7 private int dfs(TreeNode root) { 8 if(root == null) { 9 return 0; 10 } 11 //計算左子樹最大路徑和 12 int left = Math.max(dfs(root.left), 0); 13 //計算右子樹最大路徑和 14 int right = Math.max(dfs(root.right), 0); 15 //求max 16 res = Math.max(res, left + right + root.val); 17 //取左子樹和右子樹的較大值,再加上當前根值返回給上一級 18 return Math.max(left, right) + root.val; 19 }