树及其子树的内存分配

时间:2015-05-31 18:55:19

标签: memory tree binary-tree memory-address

在linux系统中。

如果我有两个二叉树,树A有数百万个节点,而树B只有几百个节点。

我想检查B是否是A的子树。

我想的一个解决方案是,A使用50Mb的内存,地址是连续的,而B使用1Kb。如果B是A的一部分,B的地址将是A地址的一个子集(我猜?)。

那么我可以使用树A的内存地址范围和B的内存地址范围来确定B是否是A的子树吗?

更新: 我想如果我们使用静态内存分配,并且有一个节点引用与B的根相同的指针,可能当我们找到该节点时,我们可以确定B是A的子树。

1 个答案:

答案 0 :(得分:0)

您无法使用 A B 的内存地址来检查 A B 的相等性

另一种方法是生成 B 树的哈希值。然后执行 A 的深度优先遍历,生成 A 子树的哈希值。如果 A 的子树的哈希值与 B 的哈希值匹配,则验证 B 是否与该特定的 A 匹配子树。

请参阅this以从树生成哈希。