Python - List to Tree(统计内部节点数)
Python - List to Tree (counting the number of internal nodes)
在 Python 尝试解决一组面试问题时,我遇到了这个起初看起来很容易的问题,但我决定在这里分享它,因为我坚持了一段时间虽然我在网上找不到类似的任务,但这里是:
树是由节点组成的抽象数据结构。每个节点只有一个父节点和零个或多个子节点。每棵树都有一个特殊的节点,称为根,它没有父节点。如果一个节点有一个或多个子节点,则称为内部节点。
树可以用列表 P 表示,其中 P[i] 是节点 i 的父节点。对于根节点r,P[r]等于-1.
编写一个函数,在所用时间方面高效地计算给定树中的内部节点数。
例如列表[1, 3, 1, -1, 3]表示的树有5个节点,0到4,其中2个节点是内部节点(只有节点1和3有子节点) .
这个想法是你计算你在 P
列表中遇到的 distinct 值的数量,除了值 -1,它不应该被计算在内.
当您这样做时,您已经计算了作为至少一个节点的父节点的所有节点,并得到了答案。
根据编程语言,您可以使用哈希集进行计数(Python 中的 set
),或者只是 array/list(因为您的节点由索引标识)每个找到的值都有一个 1,否则为 0。然后总结1个值。
因此,对于示例输入 [1, -1, 1, -1, 3]
,有 2 个不同的值(忽略 -1):1 和 3。
在python中:
internal_node_count = max(0, len(set(P)) - 1)
max
函数确保结果不能为负 - 这仅在输入列表为空且因此其中没有 -1 时才需要。
在 Python 尝试解决一组面试问题时,我遇到了这个起初看起来很容易的问题,但我决定在这里分享它,因为我坚持了一段时间虽然我在网上找不到类似的任务,但这里是:
树是由节点组成的抽象数据结构。每个节点只有一个父节点和零个或多个子节点。每棵树都有一个特殊的节点,称为根,它没有父节点。如果一个节点有一个或多个子节点,则称为内部节点。
树可以用列表 P 表示,其中 P[i] 是节点 i 的父节点。对于根节点r,P[r]等于-1.
编写一个函数,在所用时间方面高效地计算给定树中的内部节点数。
例如列表[1, 3, 1, -1, 3]表示的树有5个节点,0到4,其中2个节点是内部节点(只有节点1和3有子节点) .
这个想法是你计算你在 P
列表中遇到的 distinct 值的数量,除了值 -1,它不应该被计算在内.
当您这样做时,您已经计算了作为至少一个节点的父节点的所有节点,并得到了答案。
根据编程语言,您可以使用哈希集进行计数(Python 中的 set
),或者只是 array/list(因为您的节点由索引标识)每个找到的值都有一个 1,否则为 0。然后总结1个值。
因此,对于示例输入 [1, -1, 1, -1, 3]
,有 2 个不同的值(忽略 -1):1 和 3。
在python中:
internal_node_count = max(0, len(set(P)) - 1)
max
函数确保结果不能为负 - 这仅在输入列表为空且因此其中没有 -1 时才需要。