C语言 比较这些二叉树节点实现的空间复杂度?



实现 1:

struct treenode{
int data;
struct treenode children[2];
}

实施 2:

struct treenode{
int data;
struct treenode *children;
}

这是我的想法:

就空间复杂性而言,实现 2 会更好,因为

  • 未定义的子孩子不需要 imp. 2 中的 malloc,而(我认为(在 imp.1 中的数组在声明时自动为两个树节点 malloc 空间?

但是,每个节点最终只携带一个 int 和一个指针用于两个实现,因此空间复杂度不会相差那么大,对吧?我使用实现 1 来避免使用双指针和混淆的可能性(哈哈...(,当我尝试构建具有大量数据的树时,我的程序最终被"杀死"。我的许多同学都没有这个问题,我偏离了教授暗示我们应该构建树的方式(使用实现 2(。

我很有可能因为使用了实现 1 而遇到此问题吗?如果两个节点最终携带相同的东西,为什么问题会大得多?是因为大数据导致大量的叶节点在一种情况下(1(被错误定位,但在另一种情况下(2(却没有?还是我对每种情况下空间复杂性如何不同的解释完全错误?

您是否尝试过编译实现 1?

让我们考虑一下。实现 1 中struct treenode的大小是多少?

假设data是 4 个字节。children的大小是多少?它是一个 2 元素的struct treenode数组,因此它的大小必须是struct treenode的 2 倍。那么struct treenode的大小是多少?

假设data是 4 个字节...等一会。你可以在这里看到问题。

当我写这个答案时,实现 1 被定义为:

struct treenode{
int data;
struct treenode children[2];
}

我怀疑这不是 OP 编写的实际程序中的内容,因为它不会编译。也许他的意思是:

struct treenode{
int data;
struct treenode *children[2];
}

但在这种情况下,我想知道实现 2 是什么。

最新更新