遍历二叉树的最低成本是多少

时间:2013-01-05 09:18:56

标签: algorithm graph tree graph-algorithm tree-traversal

我想以最低成本遍历二叉树,每条边的成本为1。 访问树的每个节点时,遍历已完成。

例如,跟随树的遍历的最低成本是13。

       *
      / \
     *   *
    / \   \
   *   *   *
  /   /     \
 *   *       *

以下树遍历的最低成本为12。

        *
       / \
      *   *
     / \   \
    *   *   *
   /     \
  *       *
 /
*

1 个答案:

答案 0 :(得分:7)

遍历树的成本为 n-1 ,其中n是节点数。

这是正确的,因为每棵树都有n-1条边 - 你需要使用它们才能访问所有节点。


确切地说,已知接下来的3个语句对于具有T个节点的图形 n是等效的:

  1. T是树(无循环连接)
  2. T已连接且具有n-1条边
  3. T没有周期并且有n-1条边
  4. 从上面我们可以得出结论,在树中,为了到达所有节点,我们必须使用所有边(因为没有循环,所以没有冗余边) - 并且有完全n-1的那些。


    修改

    从你的例子来看,你似乎也在计算你从每条边回来的次数(即一些边被计算两次)。

    那么,在这种情况下,最佳解决方案将是:

    cost = (n-1)*2 - height
    

    解释/证明指南:
    树中有n-1个边缘。除了从根到最深节点的那些之外,它们中的每一个都被遍历两次。
    你必须使用每个边缘(除了上面提到的)两次,因为除了最后一个分支 - 你从每个节点返回。
    由于最后一个分支中有height个边,因此总计cost = (n-1)*2 - height

    请注意,它与您的基本相同:

    height + 2*(n-1-height) = height + 2(n-1) -2height = 2(n-1) - height