给定根节点和目标节点的二叉树的总和是多少?

时间:2019-02-12 00:13:29

标签: java algorithm binary-tree

我有一棵二叉树 作为函数输入,我有树根和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,但是语言无关紧要,除非我了解语法 我只想拥有最佳解决方案。 可以提供一些伪代码吗?

1 个答案:

答案 0 :(得分:1)

您的两个路径将具有相同的前缀(至少应该有根)。 您需要删除公共前缀,并仅添加最后一个(最深)公共节点(一次)。对于不同的零件,您需要添加所有值。这应该是export class LazyModule{ } 的复杂性,并且与解决方案的其余部分保持一致。

您的搜索算法效率不高,因为您不断将值从一个列表复制到另一个列表(O(N),如果对树没有任何约束)。如果您修改它以构建适当的响应,则它应该变成O(N^2)