如何处理成对数组中给出的树?

How to handle a tree given in an array of pairs?

我正在努力寻找最好的处理树问题的方法,其中输入是 array/list 对。

例如,一棵树以以下格式作为输入: [(1,3),(1,2),(2,5)(2,4),(5,8)] 其中一对中的第一个值是父项,一对中的第二个值是子项。

我习惯于在树问题中被赋予根。对于诸如“最低共同祖先”之类的问题,人们将如何存储它?

这取决于您需要解决的问题。对于查找两个节点的最低公共祖先的问题,您将从可以在恒定时间内找到给定节点的父节点的结构中获益最多。如果已经给出节点编号从 1 到 n(没有间隙),那么数组是一个很好的结构,例如 arr[child] == parent。如果节点的标识符不可预测,则使用 hashmap/dictionary,这样 map.get(child) == parent.