【问题标题】:What is the minimum cost to traverse a binary Tree遍历二叉树的最低成本是多少
【发布时间】:2013-01-05 09:18:55
【问题描述】:
我想以最低成本遍历二叉树,其中每条边的成本为 1。
当访问树的每个节点时,遍历就完成了。
例如,遍历后续树的最小代价是 13。
*
/ \
* *
/ \ \
* * *
/ / \
* * *
遍历后续树的最小代价是 12。
*
/ \
* *
/ \ \
* * *
/ \
* *
/
*
【问题讨论】:
标签:
algorithm
graph
tree
graph-algorithm
tree-traversal
【解决方案1】:
遍历树的成本是n-1,其中n是节点数。
这是真的,因为每棵树都有确切的 n-1 边 - 您需要使用所有边才能访问所有节点。
确切地说,已知接下来的 3 个语句对于 graph T 和 n 节点是等效的:
- T 是一棵树(无环连接)
- T 是连通的并且有 n-1 条边
- T 没有环,有 n-1 条边
从上面我们可以得出结论,在树中,为了到达所有节点,我们必须使用所有边(因为没有循环,所以没有多余的边)- 其中有 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