06646: 二叉树的深度
http://cs101.openjudge.cn/dsapre/06646/
给定一棵二叉树,求该二叉树的深度
二叉树深度定义:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的节点个数为树的深度
输入
第一行是一个整数n,表示二叉树的结点个数。二叉树结点编号从1到n,根结点为1,n <= 10 接下来有n行,依次对应二叉树的n个节点。 每行有两个整数,分别表示该节点的左儿子和右儿子的节点编号。如果第一个(第二个)数为-1则表示没有左(右)儿子
输出
输出一个整型数,表示树的深度
样例输入
3
2 3
-1 -1
-1 -1样例输出
2python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(nodes):
if not nodes:
return None
tree_nodes = [None] * (len(nodes) + 1)
for i in range(1, len(nodes) + 1):
tree_nodes[i] = TreeNode(i)
for i, (left, right) in enumerate(nodes, start=1):
if left != -1:
tree_nodes[i].left = tree_nodes[left]
if right != -1:
tree_nodes[i].right = tree_nodes[right]
return tree_nodes[1]
def tree_depth(root):
if not root:
return 0
left_depth = tree_depth(root.left)
right_depth = tree_depth(root.right)
return max(left_depth, right_depth) + 1
def main():
n = int(input())
nodes = []
index = 1
for _ in range(n):
left, right = map(int, input().split())
nodes.append((left, right))
root = build_tree(nodes)
depth = tree_depth(root)
print(depth)
if __name__ == "__main__":
main()python
class TreeNode:
# 二叉树节点定义
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def build_tree(node_list):
# 根据节点信息构建二叉树
nodes = {i: TreeNode(i) for i in range(1, len(node_list) + 1)}
for i, (left, right) in enumerate(node_list, 1):
if left != -1:
nodes[i].left = nodes[left]
if right != -1:
nodes[i].right = nodes[right]
return nodes[1] # 返回树的根节点
def max_depth(root):
# 计算二叉树的最大深度
if root is None:
return 0
else:
left_depth = max_depth(root.left)
right_depth = max_depth(root.right)
return max(left_depth, right_depth) + 1
# 读取输入并解析
n = int(input())
node_list = []
for _ in range(n):
left, right = map(int, input().split())
node_list.append((left, right))
# 构建二叉树并计算深度
root = build_tree(node_list)
depth = max_depth(root)
# 输出结果
print(depth)python
# 钟明衡 物理学院
# 用两个列表来存储每个节点左右子树的索引,判断深度用dfs进行先序遍历
ans, l, r = 1, [-1], [-1]
def dfs(n, count):
global ans, l, r
if l[n] != -1:
dfs(l[n], count + 1)
if r[n] != -1:
dfs(r[n], count + 1)
ans = max(ans, count)
n = int(input())
for i in range(n):
a, b = map(int, input().split())
l.append(a)
r.append(b)
dfs(1, 1)
print(ans)