Skip to content

Commit e6cbeb2

Browse files
committed
update code:dfs&bfs of binary tree
1 parent 3b5caab commit e6cbeb2

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# Created by imoyao at 2019/10/28 18:15
4+
5+
# https://blog.csdn.net/xinxin957_/article/details/81915443
6+
# https://blog.csdn.net/zzfightingy/article/details/86742755
7+
class Node:
8+
"""
9+
定义Node类,用于表示树上的节点
10+
"""
11+
12+
def __init__(self, data, left_tree=None, right_tree=None):
13+
"""
14+
节点值、左子树、右子树
15+
:param data:
16+
:param left_tree:
17+
:param right_tree:
18+
"""
19+
self.data = data
20+
self.left_subtree = left_tree
21+
self.right_subtree = right_tree
22+
23+
24+
class BinTree:
25+
"""
26+
定义二叉树类
27+
"""
28+
29+
def __init__(self, root=None):
30+
self.root = root
31+
32+
def add_node(self, val):
33+
"""
34+
添加元素
35+
:param val:
36+
:return:
37+
"""
38+
new_node = Node(val)
39+
if self.root is None:
40+
self.root = new_node
41+
else:
42+
queue = list()
43+
queue.append(self.root)
44+
while queue:
45+
current = queue.pop(0) # 从列表头部拿元素
46+
if current.left_subtree is None:
47+
current.left_subtree = new_node
48+
return
49+
elif current.right_subtree is None:
50+
current.right_subtree = new_node
51+
return
52+
else:
53+
queue.append(current.left_subtree)
54+
queue.append(current.right_subtree)
55+
56+
def bfs_travel(self):
57+
"""
58+
广度优先遍历
59+
:return:
60+
"""
61+
if self.root is None:
62+
return
63+
else:
64+
queue = list()
65+
queue.append(self.root)
66+
while queue:
67+
current = queue.pop(0)
68+
print(current.data, end=' ')
69+
if current.left_subtree is not None:
70+
queue.append(current.left_subtree)
71+
if current.right_subtree is not None:
72+
queue.append(current.right_subtree)
73+
74+
def dfs_travel_preorder(self, node):
75+
"""
76+
深度优先前序遍历(递归实现)
77+
:param node:
78+
:return:
79+
"""
80+
if node is None:
81+
return
82+
else:
83+
print(node.data, end=' ')
84+
self.dfs_travel_preorder(node.left_subtree)
85+
self.dfs_travel_preorder(node.right_subtree)
86+
87+
def dfs_travel_inorder(self, node):
88+
"""
89+
深度优先中序遍历(递归实现)
90+
:param node:
91+
:return:
92+
"""
93+
if node is None:
94+
return
95+
else:
96+
self.dfs_travel_inorder(node.left_subtree)
97+
print(node.data, end=' ')
98+
self.dfs_travel_inorder(node.right_subtree)
99+
100+
def dfs_travel_postorder(self, node):
101+
"""
102+
深度优先后序遍历(递归实现)
103+
:param node:
104+
:return:
105+
"""
106+
if node is None:
107+
return
108+
else:
109+
self.dfs_travel_postorder(node.left_subtree)
110+
self.dfs_travel_postorder(node.right_subtree)
111+
print(node.data, end=' ')
112+
113+
114+
if __name__ == '__main__':
115+
t = BinTree()
116+
for i in range(10):
117+
t.add_node(1)
118+
t.bfs_travel()
119+
print('bfs_travel')
120+
t.dfs_travel_preorder()

0 commit comments

Comments
 (0)