📜  门| GATE-IT-2004 |问题 5(1)

📅  最后修改于: 2023-12-03 15:12:44.740000             🧑  作者: Mango

门| GATE-IT-2004 |问题 5

该问题是GATE-IT-2004考试中的一道题目,考查的是程序员的算法和数据结构能力。

题目描述

给定一个二叉树,其每个节点可以是0或1,要求输出这个二叉树中所有从根节点到叶节点的路径的最大和。

解题思路

这道题目可以用递归解决,对于给定的二叉树,我们可以递归地遍历每个叶节点,并计算从根节点到该叶节点的路径的最大和。递归的过程中,我们可以用一个变量来保存当前路径的和,并将其返回。当遍历到叶节点时,我们将该变量的值与当前的最大路径和比较,更新最大路径和的值。最后,我们返回最大路径和即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public int maxPathSum(TreeNode root) {
    int[] res = new int[1];
    res[0] = Integer.MIN_VALUE;
    maxPathSum(root, res);
    return res[0];
}

private int maxPathSum(TreeNode root, int[] res) {
    if (root == null) {
        return 0;
    }
    int left = Math.max(maxPathSum(root.left, res), 0);
    int right = Math.max(maxPathSum(root.right, res), 0);
    res[0] = Math.max(res[0], left + right + root.val);
    return Math.max(left, right) + root.val;
}
总结

这道题目虽然不是很难,但是需要对递归和二叉树有一定的了解。在解题时需要注意计算路径和时的细节问题。学习本题也可以帮助我们更好地理解二叉树和递归的原理。