检查2树节点是相关的(即祖先子孙)检查2树节点在O相关(祖先/后代)(1)用前处理
- 解决它在O(1)时间,与O(N)的空间(N =节点#)
- 预处理允许
就是这样。我将在下面讨论我的解决方案(方法)。如果你想先想好自己,请停止。
对于前处理,我决定做一个预购(递归通过根先走,然后儿童),给一个标签到每个节点。
让我详细解释标签。每个标签由逗号分隔的自然数组成,如“1,2,1,4,5” - 该序列的长度等于(节点的深度+1)。例如。根的标签是“1”,根的孩子将有标签“1,1”,“1,2”,“1,3”等。下一级节点将有标签,如“1,1,1” ,“1,1,2”,...,“1,2,1”,“1,2,2”,...
假设节点的“订单号”是“该节点的基于1的索引”在其父项的子项目列表中。
常用规则:节点的标签由其父标签后跟逗号和“订单号”组成。因此,为了回答O(1)中两个节点是否相关(即祖先 - 后代),我将检查其中一个标签的标签是否为其他标签的“”前缀“。虽然我不确定这些标签是否可以被认为占用O(N)空间。
任何批评者都有修正或替代方法。
这是在最坏的情况下每个节点都有一个孩子(面条)的O(N^2)空间。 – WeaselFox 2012-04-25 07:09:25