题目描述
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解题思路1: 递归法
直接对root进行递归, 然后判断左右子树哪个深度大进行取值, 并且加上自身的一层, 得到最后结果
示例代码1:
def maxDepth2self, root: TreeNode) -> int:
if not root:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
解题思路2: BFS
使用队列对二叉树进行广度优先遍历(层序遍历), 每次遍历时进行深度 +1. 因为不需要进行每个节点的遍历, 所以可以直接简单的将每层的结果进行替换, 继续下一层遍历
示例代码2:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
queue, res = [root], 0
while queue:
temp = []
for item in queue:
if item.left:
temp.append(item.left)
if item.right:
temp.append(item.left)
queue = temp
res += 1
return res