我想以最低成本遍历二叉树,每条边的成本为1。 访问树的每个节点时,遍历已完成。
例如,跟随树的遍历的最低成本是13。
*
/ \
* *
/ \ \
* * *
/ / \
* * *
以下树遍历的最低成本为12。
*
/ \
* *
/ \ \
* * *
/ \
* *
/
*
答案 0 :(得分:7)
遍历树的成本为 n-1
,其中n
是节点数。
这是正确的,因为每棵树都有n-1
条边 - 你需要使用它们才能访问所有节点。
确切地说,已知接下来的3个语句对于具有T
个节点的图形 n
是等效的:
从上面我们可以得出结论,在树中,为了到达所有节点,我们必须使用所有边(因为没有循环,所以没有冗余边) - 并且有完全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