我有一棵二叉树 作为函数输入,我有树根和2个节点 我需要沿着两个给定节点之间的路径计算和。
一个树示例:
4
/ \
8 13
/ \
24 45
代码:
List<Node> findPath(root, target):
if (root !=null)
return
if root == node{
return nodes.add(target)
}
path = findPath(root.left, target)
if (path !=null){
return nodes.add(root).addAll(path)
}
path = findPath(root.right, target)
if (path!=null)
return nodes.add(root).addAll(path)
如果我有到达目标节点的路径,我不知道下一步该怎么计算?
Input: sumTree(4, 24, 45)
Output: 8 + 24 + 45 = 77
Input: sumTree(4, 24, 13)
Output: 13 + 4 + 8 + 24 = 49
Input: sumTree(4, 4, 13)
Output: 4 + 13 = 17
Input: sumTree(4, 45, 45)
Output: 45
语言是JAVA,但是语言无关紧要,除非我了解语法 我只想拥有最佳解决方案。 可以提供一些伪代码吗?
答案 0 :(得分:1)
您的两个路径将具有相同的前缀(至少应该有根)。
您需要删除公共前缀,并仅添加最后一个(最深)公共节点(一次)。对于不同的零件,您需要添加所有值。这应该是export class LazyModule{ }
的复杂性,并且与解决方案的其余部分保持一致。
您的搜索算法效率不高,因为您不断将值从一个列表复制到另一个列表(O(N)
,如果对树没有任何约束)。如果您修改它以构建适当的响应,则它应该变成O(N^2)
。