题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 11),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6106 个结点。
输入格式
第一行一个整数 nn,表示节点数。
之后 nn 行,第 ii 行两个整数 ll、rr,分别表示节点 ii 的左右子节点。若 l=0l=0 则表示无左子节点,r=0r=0 同理。
输出格式
一个整数,表示最大节点深度。
输入输出样例
输入 #1
7 2 7 3 6 4 5 0 0 0 0 0 0 0 0
输出 #1
4
就是一个典型的二叉树加深搜,但是想到python标准的二叉树写起来非常麻烦,看了C++的题解,用列表来存每一个‘树类’,每个树类的左右儿子都只是放那个树类在列表里的序号,方便深搜时按序号找
class Tree: # 创建树类
def __init__(self):
self.lchild = None
self.rchild = None
n = int(input())
lst = [Tree() for i in range(n)] # 列表里的每一个元素都是一个树
for i in range(n): # 记录每一个树的左右儿子在列表里的位置
a,b = map(int,input().split()) # 如果输进来的是0,存进去的是-1,识别时要注意
lst[i].lchild = a-1
lst[i].rchild = b-1
num1 = 1
def DFS(point,num): # 参数是列表里的位置,当前深度
global num1
num1 = max(num1,num) # 记录到目前为止最大深度
if lst[point].lchild == -1:
return
else:
DFS(lst[point].lchild,num+1)
DFS(lst[point].rchild,num+1)
DFS(0,1)
print(num1)