Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
我创建了一个递归函数来计算二叉树的最大路径我得到的反馈是它不起作用,但根据我的测试,它提供了正确的结果。有人能帮我吗?
private long PathSum(int row, int column, Pyramid pyramid)
{
// Base case, stop recurse when first row is reached.
if (row == 0) return pyramid[row, column];
// Set level to the current cell and add to the end result.
long value = pyramid[row, column];
// Continue to the next row.
if (row != 0)
{
// Continue to the next left level.
long left = pyramid[row - 1, column];
// Continue to the next right level.
long right = pyramid[row - 1, column + 1];
// Get the highest of the left and right.
long highest = Math.Max(left, right);
// Get the index of the hightest path.
int nextColumn = highest == left ? column : column + 1;
// Recurse to the next level and add results together.
value += GetTotal(row – 1, nextColumn, pyramid);
}
// Return result to the caller.
return value;
}
最佳答案
你的算法有一个严重的错误:你只需遍历一次“金字塔”,然后根据下一个结果选择基于案例,而不查看底层节点。
为了说明你在做什么,请考虑以下金字塔:
1
2 3
311 6 3
假设从1开始,将执行以下操作:
看看底层节点(2和3)的最大值。
转到下一个节点(3)并重复。
您的算法将返回10(1 + 3 + 6),而在我的例子中的最大值是311 +2 +1,因为它不向前看。
为了确定最佳路径,您需要一种策略,向前看一步以上。
编辑:查看Euler project #18 approach获取更多提示。
关于c# - 在二叉树中查找到根路径的最大总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21165029/
10-15 03:03