Java 查找二叉树中所有可能路径的最大乘积

Java 查找二叉树中所有可能路径的最大乘积,java,algorithm,binary-tree,computer-science,pseudocode,Java,Algorithm,Binary Tree,Computer Science,Pseudocode,我很难编写在二叉树中找到所有可能路径的最大乘积的算法的伪代码 事实上,它可以是任何路径,并且存在负数,这些事情使这一点变得复杂。否则它将是一个简单的递归 但这里仍然有一个递归 给定一个仅为一级的子树,如下所示: A B C 然后你有6种可能,A*B*C,或A*B,或A*C,或A,或B,或C 如果是这样一棵更大的树: A X Y X和Y是它们自己的树,然后考虑你有6种可能的组合: A A*(X中包含X的根节点的任意势积)*(Y中包含Y的根节点的任意势积) A*(X的任何潜在产品

我很难编写在二叉树中找到所有可能路径的最大乘积的算法的伪代码


事实上,它可以是任何路径,并且存在负数,这些事情使这一点变得复杂。否则它将是一个简单的递归

但这里仍然有一个递归

给定一个仅为一级的子树,如下所示:

 A
B C   
然后你有6种可能,A*B*C,或A*B,或A*C,或A,或B,或C

如果是这样一棵更大的树:

  A
 X Y

X和Y是它们自己的树,然后考虑你有6种可能的组合:

A

A*(X中包含X的根节点的任意势积)*(Y中包含Y的根节点的任意势积)

A*(X的任何潜在产品,包括X的根节点)

A*(Y的任何潜在产品,包括Y的根节点)

X的任何潜在产品

Y公司的任何潜在产品

这些产品中的任何一种最终都可能成为最大的


现在您可以编写一个包含这6种可能性的递归函数,并从根节点开始调用该函数。在函数中,您将计算所有6个乘积(递归调用您的函数),如果这些乘积中的任何一个大于全局最大值,您将得到一个新的全局最大值。

我不认为这是一个寻找解决家庭作业问题的方法的地方。为什么不把你已经有的东西贴出来,也许有人能帮你改进,或者指出你做错了什么?酷!对我来说似乎是一个蛮力的解决方案。我不想考虑它的时间复杂度,但你能提出同样的建议吗?它会访问每个节点一次,所以在访问时是O(n),在递归函数中,你迭代从leafs返回的产品,不确定复杂度是什么,所以是的,可能是指数复杂度,虽然我怀疑你不能做得更好。递归函数有点棘手,您必须向调用者返回包含根节点的乘积集,并且必须确保覆盖所有基。有时,如果根是负数,并且从正数和负数数组中获取最大的子树,则不一定需要从子树中始终最大。