树及其子树的内存分配
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 的子树。
您不能使用 A 和 B 的内存地址来检查 A[=28 是否相等=] 和 B.
另一种方法是生成 B 树的散列。然后对A进行深度优先遍历,生成A的子树的hash。如果 A 的子树的散列匹配 B 的散列,则验证 B 匹配特定的 A 子树。
请参阅 this 从树生成哈希。
在linux系统中。
如果我有两棵二叉树,A树有几百万个节点,而B树只有几百个节点。
我想检查 B 是否是 A 的子树。
我想到的一个解决方案是,比方说,A 使用 50Mb 的内存,地址是连续的,而 B 使用 1Kb。如果 B 是 A 的一部分,那么 B 的地址将是 A 地址的子集(我猜?)。
那我能不能用树A的内存地址范围和树B的内存地址范围来判断B是不是A的子树呢?
更新: 我认为如果我们使用静态内存分配,并且有一个节点引用与 B 的根引用相同的指针,可能当我们找到该节点时,我们可以确定 B 是 A 的子树。
您不能使用 A 和 B 的内存地址来检查 A[=28 是否相等=] 和 B.
另一种方法是生成 B 树的散列。然后对A进行深度优先遍历,生成A的子树的hash。如果 A 的子树的散列匹配 B 的散列,则验证 B 匹配特定的 A 子树。
请参阅 this 从树生成哈希。