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

Java 给定根节点和目标节点的二叉树的和是多少?,java,algorithm,binary-tree,Java,Algorithm,Binary Tree,我有一棵二叉树 作为函数输入,我有树根和2个节点 我需要计算两个给定节点之间路径的和 一个树示例: 4 / \ 8 13 / \ 24 45 代码: 语言是JAVA,但语言并不重要,除非我理解语法 我只想得到最优解。 是否可以提供一些伪代码?您的两个路径将具有相同的前缀(至少根应该在那里)。 您需要删除公共前缀,只添加最后一个(最深的)公共节点(一次)。对于不同的零件,需要添加所有值。这应该是O(N)复杂性,并与解决方案的其余部分保持一致 您的搜索算法效率低下,

我有一棵二叉树 作为函数输入,我有树根和2个节点 我需要计算两个给定节点之间路径的和

一个树示例:

     4
   /   \
  8    13
 / \
24 45
代码:

语言是JAVA,但语言并不重要,除非我理解语法 我只想得到最优解。
是否可以提供一些伪代码?

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


您的搜索算法效率低下,因为您一直在将值从一个列表复制到另一个列表(
O(N^2)
如果您在树上没有任何约束)。如果您修改它以就地构建响应,它应该变成
O(N)

您可以提供一个示例输入和相应的输出吗?您使用什么语言?它不是java,或者至少您的代码有一堆编译错误。请在发帖之前提出问题。我想,下一步是在你的树中加入一些语义。定义应该如何计算树(现在树中有一组数字,但没有任何计算)如果已经找到树中的两个节点,则需要找到最深的共同祖先。例如,给定节点24和45作为输入,最深的共同祖先是8。这并不难,因为从根到节点的路径在这一点上是相同的。例如,从根到24和45的路径是{4,8,24}和{4,8,45}。因此,公共祖先是8,因为这是路径发散之前的最后一个节点。@user3386109因为加法是关联的和交换的,所以您可以在树中任意跳转,只要您只遍历每个节点一次,就可以得到相同的结果。你唯一需要做的是决定如何遍历。你能解释为什么输入:SUMTER(4, 4, 13)输出:4 + 13=17输入:SUMTER(4, 45, 45)输出:45在这里,对于第一种情况,我应该考虑4,而在第二种情况下只有45?@ AthurAlxShanyAn,因为在第一种情况下,路径是从4到13,因此路径中包含的节点是4和13。在第二种情况下,路径是从45到自身,因此路径中唯一的节点是45。@ArthurAlexsanyan对于4->13的情况:这两条路径是[4]和[4,13],最后一个公共元素是4,您添加不同的部分[],和[13]以得到总共17。@ArthurAlexsanyan对于45->45的情况:这两条路径是[4,8,45]和[4,8,45]。最后一个公共元素是45,您添加了不同[]和[]的部分,总共45+0+0=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