题目要求
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
解题思路:
方法一:深度优先搜索
树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
# 左右节点深度大的那一个+1
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
方法二:宽度优先搜索
树的层序遍历 / 广度优先搜索往往利用 队列 实现。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# 根节点为空,特殊处理。
if not root:
return 0
# 定义深度开始为0。
depth = 0
# 定义temp存储下一层的节点。
temp = [root]
while 1:
# 下一层节点设置为当前层cur。
cur = temp
# 清空下一层节点。
temp = []
# 如果当前层空了,返回深度。
if not cur:
return depth
# 深度加1。
depth += 1
for node in cur:
if node.left: temp.append(node.left)
if node.right: temp.append(node.right)
知识点
- 树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。
- 树的层序遍历 / 广度优先搜索往往利用 队列 实现。