在linux系统中。
如果我有两个二叉树,树A有数百万个节点,而树B只有几百个节点。
我想检查B是否是A的子树。
我想的一个解决方案是,A使用50Mb的内存,地址是连续的,而B使用1Kb。如果B是A的一部分,B的地址将是A地址的一个子集(我猜?)。
那么我可以使用树A的内存地址范围和B的内存地址范围来确定B是否是A的子树吗?
更新: 我想如果我们使用静态内存分配,并且有一个节点引用与B的根相同的指针,可能当我们找到该节点时,我们可以确定B是A的子树。
答案 0 :(得分:0)
您无法使用 A 和 B 的内存地址来检查 A 和 B 的相等性
另一种方法是生成 B 树的哈希值。然后执行 A 的深度优先遍历,生成 A 子树的哈希值。如果 A 的子树的哈希值与 B 的哈希值匹配,则验证 B 是否与该特定的 A 匹配子树。
请参阅this以从树生成哈希。