Leetcode104–二叉树的最大深度
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
编程语言:python
作者:黑暗主宰
邮箱:shengzhanhe@gmail.com
Leetcode104–二叉树的最大深度
题目描述
原题链接:
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ (中文)
https://leetcode.com/problems/maximum-depth-of-binary-tree// (英文)
题目描述:
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明:
叶子节点是指没有子节点的节点。
示例 1:
给定二叉树 `[3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
解题思路
这里二叉树提供两种思路,一种是使用递归的方法,一种是使用迭代的方法。根据leetcode上面的图解1,这里我制作了一个gif格式的动画说明一下递归的过程。
根据图解可以知道,递归的出口是,左子树或者右子树为空。然后我们取每次迭代的最大值,就可以遍历二叉树中所有的分支。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
return max(self.maxDepth(root.left)+1, self.maxDepth(root.right)+1)
第二种方法是采用迭代或者说层遍历的方式。把根节点对应的子节点添加到child数组中,这里为了方便表示,图中直接写的是数值,其实child中存储的应该是每一个子树的地址。类似于二叉树的宽度遍历,如下代码所示:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
curLevel = [root]
cnt = 0
while curLevel:
child = []
for elem in curLevel:
if elem.left:
child.append(elem.left)
if elem.right:
child.append(elem.right)
cnt += 1
curLevel = child
return cnt
欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步
注: 文中有写错的地方,欢迎大家不吝指正!!!
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/er-cha-shu-de-zui-da-shen-du-by-leetcode ↩︎