二叉樹是一種廣泛應用于計算機科學和數據結構的樹形結構。在二叉樹中,每個節點最多有兩個子節點。在Java中,可以使用TreeNode類來創建二叉樹。
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
在計算二叉樹的最大路徑和時,我們需要遍歷整個二叉樹并找到最大路徑。這可以通過遞歸實現。從根節點開始,我們可以計算通過根節點的最大路徑和,并遞歸地計算左子樹和右子樹的最大路徑和。最后,我們返回通過根節點的最大路徑和。
public int maxPathSum(TreeNode root) { int[] maxSum = new int[]{Integer.MIN_VALUE}; getMaxSum(root, maxSum); return maxSum[0]; } private int getMaxSum(TreeNode node, int[] maxSum) { if(node == null) { return 0; } int leftMaxSum = Math.max(0, getMaxSum(node.left, maxSum)); int rightMaxSum = Math.max(0, getMaxSum(node.right, maxSum)); int nodeMaxSum = node.val + leftMaxSum + rightMaxSum; maxSum[0] = Math.max(maxSum[0], nodeMaxSum); return node.val + Math.max(leftMaxSum, rightMaxSum); }
在這段代碼中,我們使用了一個數組來保存最大路徑和。首先,我們遞歸計算左、右子樹的最大路徑和。然后,我們計算通過當前節點的最大路徑和,并將其與數組中的最大值進行比較。最后,我們返回通過當前節點的最大路徑和。 在進行遞歸計算時,我們采用了一種優化方式。由于路徑可以是任意方向的,我們在計算左右子樹的最大路徑和時,需要判斷路徑是否為負數,如果是負數,那么我們就可以不使用該路徑。這樣可以保證我們所求的最大路徑一定不包含負數路徑。