题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6个结点。
输入格式
第一行一个整数 n,表示节点数。
之后 n 行,第 i 行两个整数 l、r,分别表示节点 i 的左右子节点。若 l=0 则表示无左子节点,r=0 同理。
输出格式
一个整数,表示最大节点深度。
输入输出样例
输入 #1
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
输出 #1
4
代码如下:
print('---------------------BFS----------------------')
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='')
print('\n----------------------DFS-----------------------')
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(1, 1)
print(longth + 1, end='')