我需要构建一个锦标赛树,但我对如何初始化树感到困惑。我有一系列球队名称。我不明白的是如何初始化数组。例如,如果我有6个团队(a,b,c,d,e,f),我将如何构建树,最后使用以下三个。
我知道这三个有内部和外部节点。我们有 n - 1 内部节点和 n 外部节点。内部节点存储每个匹配的赢家,外部存储所有团队。树需要平衡。好的,直到现在它清楚但是,我如何实现这个?所有内部节点都需要匹配,外部节点需要成为团队吗?我如何才能为锦标赛建立一个平衡点?
我尝试构建一个堆栈,但错误是因为 e和f 匹配,下一个 d 与 e和f 的胜利者匹配em>,但是下一个是c并且他与(d match(e match f))匹配。
正如你所看到的,我对此有点困惑,我认为这就是我看待问题的方式。我有托盘在互联网上查看示例或一些代码以便理解,但我找不到任何东西,只是一些讲座如何订购这个数据结构,但没有关于初始化三个。
由于
答案 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位置为空。
希望它有所帮助。