数据结构与算法 二叉树 排序二叉树
二叉树
- 根节点
- 左叶子节点
- 右叶子节点
- 子树
- 高度
# 二叉树 class Node(): def __init__(self,item): self.item=item self.left=None self.right=None class Tree(): # 创建一个空树 def __init__(self): self.root=None def addNode(self,item): node=Node(item) # 如果是空树 if self.root==None: self.root=node return # 二叉树不为空 cur = self.root q=[cur] #队列中不断添加节点 拿出节点 while q: n=q.pop(0) if n.left==None: n.left=node break else: q.append(n.left) if n.right==None: n.right=node break else: q.append(n.right) # 广度遍历 def travel(self): cur=self.root q=[cur] while q: n=q.pop(0) print(n.item) if n.left!=None: q.append(n.left) if n.right!=None: q.append(n.right) # 深度遍历:前中后指的是根节点的位置 # 前序:根左右 def frontTravel(self,root): # 空 if root==None: return print(root.item) self.frontTravel(root.left) self.frontTravel(root.right) # 中序:左根右 def midTravel(self,root): if root==None: return self.midTravel(root.left) print(root.item) self.midTravel(root.right) # 后序:左右根 def afterTravel(self,root): if root==None: return self.afterTravel(root.left) self.afterTravel(root.right) print(root.item)
tree=Tree() tree.addNode(1) tree.addNode(2) tree.addNode(3) tree.addNode(4) tree.addNode(5) tree.addNode(6) tree.addNode(7) # tree.travel() tree.midTravel(tree.root)
二叉树的遍历
- 广度遍历:逐层遍历
- 深度遍历:前中后指的是根节点的位置
- 前序:根左右
- 中序:左根右
- 后序:左右根
排序二叉树
- 插入节点的准则:首先插入根节点。当插入其他节点的时候,需要和根节点做比较,比根节点小的节点插入树的左侧,大的插入树的右侧
class Node(): def __init__(self,item): self.item=item self.left=None self.right=None class SortTree(): def __init__(self): self.root=None def midTravel(self,root): # print(111) if root==None: return # 左根右 self.midTravel(root.left) print(root.item) self.midTravel(root.right) def insertNode(self,item): node=Node(item) cur=self.root if self.root == None: self.root=node return # 树非空 while True: if cur.item>node.item: if cur.left==None: cur.left=node break else: cur=cur.left else: if cur.right==None: cur.right=node break else: cur=cur.right t = SortTree() t.insertNode(3) t.insertNode(8) t.insertNode(3) t.insertNode(1) t.insertNode(1) t.midTravel(t.root)