实现二叉树数据结构,以及深度优先搜索和广度优先搜索算法(非科班小白,努力中。。。。)
class BT_Node: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class BTree: def __init__(self): self.root = None # None创建空树,不是BT_Node树节点 def set_root(self, node): self.root = node def is_empty(self): return self.root == None def addLeft(self, node): if self.is_empty(): self.root = node else: self.root.left = node def addRight(self, node): if self.is_empty(): self.root = node else: self.root.right = node # 深度优先搜索(先根序) def dfs_front(node): if node == None: return print(str(node.data)+"→", end="") dfs_front(node.left) dfs_front(node.right) # 深度优先搜索(中根序) def dfs_middle(node): if node == None: return dfs_middle(node.left) print(str(node.data) + "→", end="") dfs_middle(node.right) # 深度优先搜索(后根序) def dfs_after(node): if node == None: return dfs_after(node.left) dfs_after(node.right) print(str(node.data) + "→", end="") # 宽度优先搜索 def bfs(node): if not node: print("this is an empty tree") st = [] #List做为队列缓存,先进先出 st.append(node) while st: temp = st[0] print(str(temp.data)+"→", end="") del st[0] if temp.right: st.append(temp.left) if temp.left: st.append(temp.right) # 以下为测试部分 t = BTree() t.set_root(BT_Node(4)) t.addLeft(BT_Node(5,BT_Node(6),BT_Node(7))) t.addRight(BT_Node(8,BT_Node(9),BT_Node(10))) print("先根序:") dfs_front(t.root) print("\n中根序:") dfs_middle(t.root) print("\n后根序:") dfs_after(t.root) print("\n宽度优先搜索:") bfs(t.root)输出结果如下:
"E:\Program Files\python 3.7\python.exe" C:/Users/Administrator/Desktop/python学习/数据结构与算法/BTree.py 先根序: 4→5→6→7→8→9→10→ 中根序: 6→5→7→4→9→8→10→ 后根序: 6→7→5→9→10→8→4→ 宽度优先搜索: 4→5→8→6→7→9→10→ Process finished with exit code 0
