方法一:递归 (DFS)
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root is None:
return 0
nl = self.maxDepth(root.left)
nr = self.maxDepth(root.right)
return max(nl, nr) + 1
方法二:非递归(广度优先,层次遍历)
实现1:用collections中的队列
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
# 非递归 层次遍历(广度优先) queue
import collections
class Solution(object):
def maxDepth(self, root):
if not root:
return 0
que = collections.deque()
que.append(root)
high = 0
while que:
cur_len = len(que)
for i in range(cur_len):
tmp = que.popleft()
if tmp.left:
que.append(tmp.left)
if tmp.right:
que.append(tmp.right)
high += 1
return high
实现2:直接用list
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
# 非递归 层次遍历(广度优先) queue
class Solution(object):
def maxDepth(self, root):
if not root:
return 0
que = [root] # 用list也可
high = 0
while que:
cur_len = len(que)
for i in range(cur_len):
tmp = que.pop(0)
if tmp.left:
que.append(tmp.left)
if tmp.right:
que.append(tmp.right)
high += 1
return high