广度优先遍历,递归:深度优先遍历

题目

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

  3
 / \
9  20
  /  \
 15   7

返回它的最大深度 3 。

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from queue import Queue

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def create_tree(list_tree):
if not list_tree:
return []
new_queue= Queue()
root = TreeNode(list_tree[0])
new_queue.put(root) # 先入队一个结点
count = 1
while not new_queue.empty() and count<len(list_tree):
dequeue = new_queue.get() # 出队
if not dequeue.left and not dequeue.right:
if count<len(list_tree) and list_tree[count]:
dequeue.left=TreeNode(list_tree[count])
count= count+1
if count<len(list_tree) and list_tree[count]:
dequeue.right=TreeNode(list_tree[count])
count= count+1

if dequeue.left:
new_queue.put(dequeue.left)
if dequeue.right:
new_queue.put(dequeue.right)
return root

方法一:递归法

1
2
3
4
5
6
7
8
9
10
11
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root is None:
return 0
left=1+self.maxDepth(root.left)
right=1+self.maxDepth(root.right)

if left<right:
return right
else:
return left
1
2
3
4
5
root =  [1,2,3,4,None,None,5]
root_tree=create_tree(root)
a=Solution()
result =a.maxDepth(root_tree)
result
3

方法二:BFS

利用广度优先搜索,每次出队每一层,并进行统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from collections import deque
class Solution:
def maxDepth(self, root: TreeNode):
if root is None:
return 0
new_deque=deque()
new_deque.append(root)
count=0
while len(new_deque):
size=len(new_deque)
while size>0:
cur=new_deque.popleft()

if cur.left:
new_deque.append(cur.left)
if cur.right:
new_deque.append(cur.right)
size=size-1
count=count+1
return count
root = [1,2,3,4,None,None,5]
root_tree=create_tree(root)
a=Solution()
result =a.maxDepth(root_tree)
result
3