collections

from collections import deque


def bfs(n):
    q.append(n)
    G[n] = 1  # 记录深度
    while q:
        x = q.popleft()
        for j in range(2):  # 左右各判断一次
            if V[x][j] != 0:  # 有子节点就继续
                q.append(V[x][j])
                G[V[x][j]] = G[x] + 1  # 记录深度


n = int(input())
V = {}  # 建个字典
q = deque()
for i in range(n):
    l, r = map(int, input().split())
    V[i + 1] = (l, r)  # 塞键值对,节点数

G = [0 for i in range(n + 1)]
bfs(1)
print(max(G))   #, end='')



# max(G)

# import sys
#
# sys.setrecursionlimit(5000)


# def dfs(x, y):
#     global longth
#     if x == 0 or V[x] == (0, 0):
#         return
#     longth = max(longth, y)
#     dfs(V[x][0], y + 1)
#     dfs(V[x][1], y + 1)
#
#
# n = int(input())
# # V = {}  # 建个字典
# longth = 0
# for i in range(n):
#     l, r = map(int, input().split())
#     # V[i + 1] = (l, r)  # 塞键值对,节点数
#
# dfs(l, r)
# print(longth + 1) #, end='')


'''
第三题
试题名称:天空之城的树

时间限制:1.0 s

内存限制:128.0 MB

问题描述
拉姆达人在修建天空之城时,主要是依赖巨大的飞行石去维持悬空状态,依赖强壮的大树去作为建筑物的框架,假设大树是一棵有 n (n≤103)个结点的二叉树。给出每个结点的两个子结点编号(均不超过 n),建立一棵二叉树(根节点的编号为 1),如果是叶子结点,则输入 0 0。

建好这棵二叉树之后,请帮拉姆达设计师求出它的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。

输入描述
第一行一个整数 n,表示结点数。之后 n 行,第 i 行两个整数 l、r,分别表示结点i的左右子结点编号。若 l=0 则表示无左子结点,r=0 同理。

输出描述
一个整数,表示最大结点深度。

输入样例
7
2 7
3 6
4 5
0 0
0 0
0 0 
0 0
输出样例
4
数据规模
数据保证,对于全部的测试点,保证 1≤n≤103。
'''

  

posted @ 2024-04-23 11:36  freedragon  阅读(2)  评论(0编辑  收藏  举报