【发布时间】:2017-01-08 05:09:10
【问题描述】:
我正在尝试存储和打印在二叉树中查找最大路径和的问题中的实际路径。我已经知道如何找到最大路径总和(下),但是我们如何添加一个 sn-p 来输出实际路径呢?
private int maxSum;
public int maxPathSum(TreeNode root) {
maxSum = Integer.MIN_VALUE;
findMax(root);
return maxSum;
}
private int findMax(TreeNode p) {
if (p == null) return 0;
int left = findMax(p.left);
int right = findMax(p.right);
maxSum = Math.max(p.val + left + right, maxSum);
int ret = p.val + Math.max(left, right);
return ret > 0 ? ret : 0;
}
【问题讨论】:
-
您有 2 个
max操作。这些是关键。每当您决定最大值时,您都会获得有关最大和路径的重要信息。弄清楚如何记录它。提示:您需要记录子树的根,该子树包含该子树中每个节点的最大加号(但您必须为所有节点记录它,因为您事先不知道子树)。您还需要记录p的哪个孩子位于从p到叶子的最大权重路径上。 -
@Gene 感谢您的提示。不过我很欣赏代码 sn-p。
-
这看起来像是作业或学习问题。你不会从 sn-p 中学到很多东西。
标签: java algorithm binary-tree binary-search-tree graph-traversal