📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 – 5 月 |问题 70(1)

📅  最后修改于: 2023-12-03 15:07:34.946000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2017 – 5 月 |问题 70

题目描述

给定一棵二叉树,找到其深度并返回。

输入格式

输入的每一行表示二叉树的一个节点,节点编号按照二叉树的层序遍历顺序给出,若节点为空则用-1表示。对于所有的节点,其编号均为非负整数或-1,且编号0表示根节点。

输出格式

输出一个整数表示二叉树的深度。

输入样例1
1
2 3
4 -1 5 6
-1 7 -1 -1 -1 -1
-1 -1
输出样例1
4
输入样例2
0
1 2
-1 -1 3 4
-1 -1 5 6
7 8 -1 -1
-1 9 -1 -1 -1
输出样例2
4
解题思路

本题需要求树的深度,按照二叉树的遍历方式,可以从上往下逐层遍历,遍历到最后一层时,则可以得到树的深度。

可以使用深度优先搜索(DFS)或广度优先搜索(BFS)求解,其中DFS的时间复杂度为$O(N),N$为节点数量;BFS的时间复杂度同样为$O(N)$。

代码实现(BFS)
from collections import deque

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        queue = deque()
        queue.append(root)
        max_depth = 0
        
        while queue:
            max_depth += 1
            for i in range(len(queue)):
                node = queue.popleft()
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        
        return max_depth
代码实现(DFS)
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        left_depth = self.maxDepth(root.left)
        right_depth = self.maxDepth(root.right)
        
        return max(left_depth, right_depth) + 1

注意:主题要求返回markdown格式,因此代码片段中要按markdown格式标明。