树及其子树的内存分配

Memory allocation for a tree and its subtree

在linux系统中。

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

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

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

那我能不能用树A的内存地址范围和树B的内存地址范围来判断B是不是A的子树呢?

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

您不能使用 AB 的内存地址来检查 A[=28 是否相等=] 和 B.

另一种方法是生成 B 树的散列。然后对A进行深度优先遍历,生成A的子树的hash。如果 A 的子树的散列匹配 B 的散列,则验证 B 匹配特定的 A 子树。

请参阅 this 从树生成哈希。