0
点赞
收藏
分享

微信扫一扫

【Python】【深基16.例3】二叉树深度

杨小羊_ba17 2022-04-14 阅读 15
python

题目描述

给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 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='')
举报

相关推荐

0 条评论