📌  相关文章
📜  教资会网络 | UGC NET CS 2016 年 8 月 – II |问题 25(1)

📅  最后修改于: 2023-12-03 15:39:55.154000             🧑  作者: Mango

UGC NET CS 2016年8月-II | 问题25

本文介绍UGC NET CS 2016年8月-II考试中的25号问题。该问题是在计算机科学领域中编程方面的问题。它涉及到数据结构和算法的知识,特别是在树中查找并返回一个元素的深度。

问题描述

问题25:对于一棵有根树,我们输出给定的节点的深度(假定根节点为深度1)。

程序的输入:

  • 第一行是整数T(1≤T≤30),表示测试用例的数量。
  • 对于每个测试用例,第一行是整数N(1≤N≤10^3),树的节点数。
  • 接下来的N-1行包含两个整数X和Y,表示X是Y的父亲。

程序的输出:

  • 对于每个测试用例,输出给定节点的深度。
示例输入
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()
代码解释
  • 在程序开头,我们定义了一个名为TreeNode的类,它表示树的节点。该类具有值,父节点和子节点列表等属性。
  • build_tree函数采用节点数量n和边列表edges作为参数,构造根节点并返回它。它遍历边列表并使用节点的父节点和子节点列表创建树。
  • 在find_depth函数中,我们在深度优先搜索中依次访问树中的每个节点。当我们找到要查找的元素时,我们将该节点的深度打印出来。
  • main函数读取标准输入中的测试用例数,并使用build_tree和find_depth函数处理每个测试用例。
代码输出

当我们运行上述程序并使用示例输入时,我们应该得到以下输出:

3
2
延伸阅读
  • Tree Data Structure - GeeksforGeeks.
  • Depth First Traversal (DFS) - GeeksforGeeks.
  • UGC NET Computer Science & Applications 2016 Exam Paper-II.