【发布时间】:2015-09-30 03:34:41
【问题描述】:
我正在研究Project Euler Problem 18(我确实解决了问题;我没有作弊。这里是“Proof”)并且发现自己需要一种表示数据结构的方法这看起来像一个帕斯卡三角形,但具有不同的值。它看起来与二叉树非常相似,但有一个非常重要的区别:节点的子节点不只是它的子节点。所以前三行看起来像这样:
75
/ \
95 64
/ \ / \
17 47 82
请注意,47 有两个父母。
将其表示为链接结构甚至二维数组非常容易,但我希望有一种更优雅的方式。我喜欢二叉树,主要是因为您可以分配一块内存,将其视为一个数组,并通过几个算术运算或整数除法在子级和父级之间导航。 有没有办法对这个数据结构做同样的事情?
我最好的解决方案是使用二维数组(很容易找到孩子和父母)。我不喜欢这个实现,因为(至少我这样做的方式)我为每一行都调用了malloc,即使我提前知道结构会有多大。
我的问题与this one 非常相似,但我对接受的答案不满意。一条评论暗示了我寻求的解决方案,但没有给出任何解释。
编辑:澄清一下,我正在寻找一种索引一维数组的方法,就像将二叉树按顺序填充到数组中一样(从 1 开始)给出索引 i 处节点的子节点位于索引 2 * i 和 2 * i + 1 的属性..我也不是很在意能不能找到父母,所以不要太担心奇怪的两个父母。
【问题讨论】:
-
据我所知,这不是“树”,而是循环图。 This question looks like what you want, or at least a good starting point
标签: data-structures tree