1 二叉树的广度优先搜索(队列)
# Definition for a binary tree node.
# 二叉树的广度优先搜索(队列)
class TreeNode: # leecode 内部规定的数据结构! 不需要自己构建树!
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def generate_related_notes(visited, node):
next_node_list = []
if node.left not in visited and node.left:
next_node_list.append(node.left)
if node.right not in visited and node.right:
next_node_list.append(node.right)
return next_node_list
def BFS(tree, start):
queue = []
queue.append(start)
visited = {} # 记录访问过的节点(遍历图也是一样要特别注意这个!)
visited[start] = 0
# 这里要注意对顺序的研究!!它是怎么实现从左往右一层一层来的!
while queue:
node = queue.pop(0)
visited[node] = 0
print(node.val) # 对节点进行一些操作
queue.extend(generate_related_notes(visited, node)) # 进入新的一层
root = TreeNode(5,TreeNode(6,TreeNode(54), # 左
TreeNode(55)), # 右
TreeNode(88, TreeNode(141),
TreeNode(142)))
BFS(root, root)
输出
5
6
88
54
55
141
142
2 二叉树的深度优先搜索(递归)
# Definition for a binary tree node.
# 树的深度优先搜索(递归)
class TreeNode: # leecode 内部规定的数据结构! 不需要自己构建树!
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
visited = {}
def DFS(root):
visited[root] = 1 # 记录访问过的节点
print(root.val)
for node in [root.left, root.right]:
if node and node not in visited:
DFS(node)
root = TreeNode(5,TreeNode(6,TreeNode(54), # 左
TreeNode(55)), # 右
TreeNode(88, TreeNode(141),
TreeNode(142)))
DFS(root)
输出
5
6
54
55
88
141
142