二叉樹的遍歷和添加結點
class Node(): def __init__(self, item): self.elem = item self.l_child = None self.r_child = None class Tree(): def __init__(self): self.root = None def add(self, elem): """為樹添加節點""" node = Node(elem) # 如果樹是空的,則對根節點賦值 if self.root is None: self.root = node return else: queue = [] queue.append(self.root) # 對已有節點進行層次遍歷 while queue: # 彈出隊列的第一個元素 cur = queue.pop(0) if cur.l_child == None: cur.l_child = node return elif cur.r_child == None: cur.r_child = node return else: # 如果左右子樹都不為空,加入隊列繼續判斷 queue.append(cur.l_child) queue.append(cur.r_child) def preorder(self, root): if root == None: return print(root.elem, end='') self.preorder(root.lchild) self.preorder(root.rchild) def inorder(self, root): """遞歸實現中序遍歷""" if root == None: return self.inorder(root.lchild) print(root.elem, end=" ") self.inorder(root.rchild) def postorder(self, root): """遞歸實現后續遍歷""" if root == None: return self.postorder(root.lchild) self.postorder(root.rchild) print(root.elem, end=" ") # ×××××××××× 廣度優先遍歷 ××××××××× # 從樹的root開始,從上到下從從左到右遍歷整個樹的節點 def breadth_travel(self): """利用隊列實現樹的層次遍歷""" if self.root == None: return queue = [self.root] while queue: node = queue.pop(0) print(node.elem, end=" ") if node.lchild != None: queue.append(node.lchild) if node.rchild != None: queue.append(node.rchild)
