繁体   English   中英

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

[英]Compare space complexity of these binary tree node implementations?

实施1:

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

实施2:

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

这是我的想法:

实现 2 在空间复杂度方面会更好,因为

  • 未定义的孩子在imp中不需要malloc。 2、虽然(我假设)imp.1 中的数组会在声明时自动为两个树节点分配空间?

然而,每个节点最终只携带一个 int 和一个指针用于两种实现,所以空间复杂度不会有太大差异,对吧? 我使用实现 1 来避免使用双指针和混淆的可能性(lol ...),当我尝试构建具有大量数据的树时,我的程序最终被“杀死”。 我的很多同学都没有这个问题,我偏离了prof暗示我们应该构建树的方式(使用实现2)。

因为我使用了实现 1,所以我有这个问题的可能性很大吗? 如果两个节点最终携带相同的东西,为什么会出现更多问题? 是因为大数据导致大量叶节点在一种情况 (1) 中被分配,但在另一种情况 (2) 中没有吗? 或者我对每种情况下空间复杂性如何不同的解释完全错误?

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

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

假设data是 4 个字节。 children的尺寸是多少? 它是一个struct treenode的 2 元素数组,因此它必须是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 是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM