二叉树:
根节点
左叶子节点
右叶子节点
子树
二叉树的遍历:
广度遍历(层级) 插入到第一次出现的空节点上面
深度遍历:
前序(根左右)
中序(左根右)
后序(左右根)
# 广度遍历 class Node(): def __init__(self,item): self.item = item self.left = None self.right = None class Tree(): def __init__(self): self.root = None def add(self,item): node = Node(item) if self.root is None: self.root = node return queue = [self.root] #列表 根节点 [1] while queue: cur = queue.pop(0) #根节点 pop 1了 if cur.left is None: #子树左叶子空之后的赋值 cur.left = node return else: queue.append(cur.left) #不为空 就追加 [2] if cur.right is None: #子树右叶子空之后的赋值 cur.right = node return else: queue.append(cur.right) #[2,3] def travel(self): #遍历 if self.root is None: return queue = [self.root] while queue: cur = queue.pop(0) print(cur.item) if cur.left is not None: queue.append(cur.left) if cur.right is not None: queue.append(cur.right)
tree = Tree()
for i in range(10):
tree.add(i)
tree.travel()
实现排序二叉树 class Node(): def __init__(self,item): self.item = item self.left = None self.right = None class Tree(): def __init__(self): self.root = None def insertByOder(self,item): node = Node(item) if self.root is None: self.root = node return cur = self.root while True: if item < cur.item: if cur.left is None: cur.left = node return else: cur = cur.left else: if cur.right is None: cur.right = node return else: cur = cur.right def forward(self,root): if root is None: return # 根 左 右 print(root.item,end=‘ ‘) self.forward(root.left) self.forward(root.right) def mid(self,root): if root is None: return #左根右 self.mid(root.left) print(root.item,end=‘ ‘) self.mid(root.right) def back(self,root): if root is None: return #左右根 self.back(root.left) self.back(root.right) print(root.item,end=‘ ‘) t = Tree() alist = [10,7,12,55,33,20,4] for i in alist: t.insertByOder(i) t.forward(t.root) print(‘\n‘) t.mid(t.root) print(‘\n‘) t.back(t.root) print(‘\n‘)
原文:https://www.cnblogs.com/zhangchen-sx/p/10897346.html