比赛树

时间:2016-03-17 12:30:08

标签: tree binary-tree

我需要构建一个锦标赛树,但我对如何初始化树感到困惑。我有一系列球队名称。我不明白的是如何初始化数组。例如,如果我有6个团队(a,b,c,d,e,f),我将如何构建树,最后使用以下三个。

enter image description here

我知道这三个有内部和外部节点。我们有 n - 1 内部节点和 n 外部节点。内部节点存储每个匹配的赢家,外部存储所有团队。树需要平衡。好的,直到现在它清楚但是,我如何实现这个?所有内部节点都需要匹配,外部节点需要成为团队吗?我如何才能为锦标赛建立一个平衡点?

我尝试构建一个堆栈,但错误是因为 e和f 匹配,下一个 d e和f 的胜利者匹配em>,但是下一个是c并且他与(d match(e match f))匹配。

正如你所看到的,我对此有点困惑,我认为这就是我看待问题的方式。我有托盘在互联网上查看示例或一些代码以便理解,但我找不到任何东西,只是一些讲座如何订购这个数据结构,但没有关于初始化三个。

由于

2 个答案:

答案 0 :(得分:1)

一个想法:

假设你有和数组[a,b,c],你应该取前两个元素并进行匹配,从数组中删除它们,然后将匹配添加到数组的末尾。你一直这样做,直到数组只包含一个元素。

[a, b, c]

[c, match(a, b)]

[match(c, match(a,b))]

答案 1 :(得分:0)

始终考虑元素对中的数组。 首先,找到所需树的高度:logn(base2) - >四舍五入到下一个整数,比如高度为m。 叶元素的数量:2^m

填充从左到数组长度的叶节点,并为其余节点填充null。

在你的例子中:

log6 = 2.something -> 3

2^3 -> 8

在前6位填充a,b,c,d,e,f,让第7和第8位置为空。

希望它有所帮助。