📅  最后修改于: 2023-12-03 15:26:09.403000             🧑  作者: Mango
给定一个二叉树,求树的深度。深度指的是从根节点到最远叶节点的最长路径上的节点数(不包括根节点)。
本问题可以通过递归的方式来解决。对于一个节点,它的深度等于其左右子节点深度的较大值加1。
代码如下:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def maxDepth(root: TreeNode) -> int:
if not root:
return 0
left_depth = maxDepth(root.left)
right_depth = maxDepth(root.right)
return max(left_depth, right_depth) + 1
该算法的时间复杂度为O(n),其中n为二叉树的节点数。因为每个节点最多访问一次。
该算法的空间复杂度为O(h),其中h为二叉树的高度。最坏情况下,二叉树为链表结构,h=n,最好情况下,h=log(n)。因为函数调用是通过栈实现的,栈的深度为二叉树的高度。
本题是二叉树的经典问题之一,通过递归的方式可以很容易地解决。值得注意的是,在计算一个节点的深度时,需要递归地计算其左右子节点的深度。同时,对于空节点,其深度为0。