说道FB和谷歌出现的怪题 - 判断是否可以形成 Binary Tree

不需要把每个node都当root遍历一遍吗,这样set是不是每个新root都要一个完整的set

感觉你没看懂我的思路

visited 防止出现环,进入死循环吧

我感觉可以用union find做。遍历一遍array,记录每个Node和出现的下标在一个map里面。然后在遍历一边array,每次到一个node,就检查node.left 和 node.right. 如果不在map里那就肯定返回false,如果在map里就把他们跟node union起来。到最后看是不是所有node都是联通的,也就是属于一个group。

union find不行,是有向图

每次union的时候也是有方向的。把left/right union到 parent。不能反过来。因为给一个node,可以知道它的children,但是不知道它的parent。

自己想想错在哪吧

dfs建一个adjacent list 数edges 的数量, 如果 等于 len(input)-1 那么就是树, 否则就不是。在建的阶段如果便利到一些node 不属于input 里的同样输出false。

这个逻辑是必要条件,不是充分条件

可否指点一下,或者举出一个反例。多谢

你可以自己写一下代码试试几个test case
动动手