树的时间有效算法

时间:2014-08-31 18:20:33

标签: algorithm data-structures tree

我需要一种可以有效解决下面问题的算法:

  

给定一个树(非二进制),最多有200000条边和3个节点x,y,z。编写一个算法,如果y位于x的路径中,则返回true,z或z位于x和y的路径中。查询数量大约为10 ^ 5.

1 个答案:

答案 0 :(得分:-1)

似乎很简单。由于它是一棵树,要测试x -> y -> z,请从z开始,然后遍历到树的根。同样,要测试x -> z -> y,请从y开始,然后遍历到树的根。你当然可以同时从zy开始,然后向上遍历树,直到你发现满足两个路径条件中的任何一个,或者你发现一个矛盾的信息,比如作为' z'并且' y'属于' x'的两个不同分支,或者即使你一直遍历到根目录也没有找到x

当你有一个完全线性的树,每个节点只有一个孩子,这样简单算法的最坏情况就会发生,这样x就是根,y100000个边缘远离x(即中途),z是叶子。我不确定限制10^5的来源。