python 數據結構之二叉樹
阿新 • • 發佈:2018-10-08
class rgb height style inorder init print 構建 問題
二叉樹關鍵在構建和遍歷,python實現相對簡單,我們在實現需要用到類,分別設置愛左右子樹,根節點,然後從根進行遍歷,進行判斷,若為空進行樹的構建,非空則返回到列表中即可,我在進行遍歷時產生了一個錯誤思想:把根放到樹中遍歷,這樣發現遍歷時會產生一個屬性缺失的錯誤,後來瀏覽數次代碼沒有發現這個問題,查找了一些資料才意識到,短板:類運用的不熟練。
class Node(object): def __init__(self, elem=-1, lchild=None, rchild=None): self.elem=elem self.lchild=lchild self.rchild=rchild class Tree(object): def __init__(self, root=None): self.root = root def add(self, elem): node = Node(elem) if self.root == None: self.root=node else: queue=[] queue.append(self.root) while queue: cur= queue.pop(0) if cur.lchild == None: cur.lchild=node return elif cur.rchild == None: cur.rchild = node return else: queue.append(cur.lchild) queue.append(cur.rchild)#深度遍歷進行三種三種遍歷 def preorder(self, root): """遞歸實現先序遍歷""" if root == None: return print(root.elem) self.preorder(root.lchild) self.preorder(root.rchild) def inorder(self, root): """遞歸實現中序遍歷""" if root == None: return self.inorder(root.lchild) print(root.elem) self.inorder(root.rchild) def end(self, root): """""" if root == None: return self.end(root.lchild) self.end(root.rchild) print(root.elem) #廣度遍歷 def rnf(self,root): if self.root == None: return queue=[] queue.append(root) while queue: cur_node=queue.pop(0) print(cur_node.elem) if cur_node.lchild != None: queue.append(cur_node.lchild) if cur_node.rchild != None: queue.append(cur_node.rchild) if __name__ == ‘__main__‘: tree=Tree() tree.add(0) tree.add(1) tree.add(2) tree.add(3) tree.add(4) tree.add(5) tree.add(6) tree.add(7) tree.add(8) tree.add(9) tree.rnf(tree.root) tree.preorder(tree.root) tree.inorder(tree.root) tree.end(tree.root)
python 數據結構之二叉樹