Algorithm 如果每个节点是树下所有节点的权重之和,则查找树中的最大权重节点。

Algorithm 如果每个节点是树下所有节点的权重之和,则查找树中的最大权重节点。,algorithm,binary-tree,Algorithm,Binary Tree,例如,这是一棵树 10 12 -1 5 1 1 -2 2 3 10 -9 如何找到具有最大值的节点 在一般情况下,需要遍历整个树。如果树中的值不受约束(例如,所有非负值,但在您的示例中有负值),则节点中的值不会告诉您它下面的单个值。鉴于上述问题,您需要遍历整个树。见下面的证明 遍历整个树应该是一个相当简单的过程 证明我们需要遍历整个树: 假设我们能够在不遍历整棵树的情况下确定最大值位于树的哪一侧 给

例如,这是一棵树

            10
     12           -1
  5       1     1     -2
2   3  10   -9

如何找到具有最大值的节点

在一般情况下,需要遍历整个树。如果树中的值不受约束(例如,所有非负值,但在您的示例中有负值),则节点中的值不会告诉您它下面的单个值。

鉴于上述问题,您需要遍历整个树。见下面的证明

遍历整个树应该是一个相当简单的过程

证明我们需要遍历整个树:

假设我们能够在不遍历整棵树的情况下确定最大值位于树的哪一侧

给定左边有最大节点的任意树。调用此最大值
x

拾取右侧的一个叶节点。添加2个子项:
x+1
-x-1

由于
x+1-x-1=0
,添加它们不会改变我们添加到的叶的和,因此也不会改变树中任何其他节点的和

            10
     12           -1
  5       1     1     -2
2   3  10   -9
由于这可以添加到树中的任何叶子上,并且不会影响总和,因此我们需要遍历整个树,以确定这是否发生在任何地方

因此,我们可以在不遍历整棵树的情况下确定最大值位于树的哪一侧的假设是错误的


因此,我们需要遍历整个树。

这就是全部问题吗?如果是,没有理由不检查每个节点,因为读取树已经是一个
O(n)
操作。可能您有多个查询/更新?