124.Binary Tree Maximum Path Sum

題目連接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     }
View Code
相關文章
相關標籤/搜索