【发布时间】:2015-05-31 18:55:18
【问题描述】:
在linux系统中。
如果我有两棵二叉树,树 A 有数百万个节点,而树 B 只有几百个节点。
我想检查 B 是否是 A 的子树。
我正在考虑的一个解决方案是,例如,A 使用 50Mb 的内存,地址是连续的,而 B 使用 1Kb。如果 B 是 A 的一部分,则 B 的地址将是 A 地址的子集(我猜?)。
那么我可以使用树 A 的内存地址范围和 B 的内存地址范围来判断 B 是否是 A 的子树吗?
更新: 我想如果我们使用静态内存分配,并且有一个节点指向与 B 的根相同的指针,可能当我们找到该节点时,我们可以确定 B 是 A 的子树。
【问题讨论】:
-
我不明白这个问题。也许需要澄清一下。
-
@user3344003刚刚修改,如果对你还有歧义请告诉我:p
-
A和B是否在单个进程的地址空间中?
-
@user3344003 如果他们在不同的进程中,那么我认为没有必要做这个检查?所以让我们假设他们在同一个过程中。
-
假设这些树的内容的内存地址是不安全的。内存分配器提供的每个节点都可能来自任何地方,例如之前从其他地方删除的内存位。我认为你需要走树 A 寻找 B,然后一旦找到它,就同步走两棵树,并确认 B 中的每个孩子在 A 中都有相同的孩子。
标签: memory tree binary-tree memory-address