📅  最后修改于: 2023-12-03 15:39:55.154000             🧑  作者: Mango
本文介绍UGC NET CS 2016年8月-II考试中的25号问题。该问题是在计算机科学领域中编程方面的问题。它涉及到数据结构和算法的知识,特别是在树中查找并返回一个元素的深度。
问题25:对于一棵有根树,我们输出给定的节点的深度(假定根节点为深度1)。
程序的输入:
程序的输出:
2
5
1 2
1 3
2 4
2 5
2
1 2
3
2
树是一种基本的数据结构之一,我们可以使用深度优先搜索(DFS)来遍历整棵树,以查找并返回所需元素的深度。
在树中查找元素的深度,特别是在根为深度1的情况下,可以使用递归并将每个节点的深度与根节点的深度相加来实现。
下面是一个使用Python编写的程序,它读取标准输入中给出的测试用例,并输出每个节点的深度。
# -*- coding:utf-8 -*-
import sys
class TreeNode:
def __init__(self, val):
self.val = val
self.parent = None
self.children = []
def build_tree(n, edges):
nodes = []
for i in range(n):
nodes.append(TreeNode(i+1))
for (u, v) in edges:
nodes[u-1].children.append(nodes[v-1])
nodes[v-1].parent = nodes[u-1]
return nodes[0]
def find_depth(root, node, depth):
if root is None:
return
if root.val == node:
print(depth)
return
for child in root.children:
find_depth(child, node, depth+1)
def main():
T = int(sys.stdin.readline().strip())
for _ in range(T):
N = int(sys.stdin.readline().strip())
edges = []
for _ in range(N-1):
u, v = map(int, sys.stdin.readline().strip().split())
edges.append((u, v))
root = build_tree(N, edges)
node = int(sys.stdin.readline().strip())
find_depth(root, node, 1)
if __name__ == '__main__':
main()
当我们运行上述程序并使用示例输入时,我们应该得到以下输出:
3
2