二叉树
- 二叉树的遍历
- 广度遍历:横向遍历
- 深度遍历:纵向遍历(基于子树进行遍历)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/734c61101c4fe02c13ca48639ad98c8b.png)
python代码实现二叉树
class Node:
def __init__(self, item):
self.item = item
self.left = None
self.right = None
class Tree:
def __init__(self):
self.root = None
def insert(self, item):
""" 插入数据 """
node = Node(item)
if self.root is None:
""" 判断是一个空的树 """
self.root = node
return
cur = self.root
queue = [cur]
while queue:
pop_node = queue.pop(0)
if pop_node.left is None:
pop_node.left = node
return
else:
queue.append(pop_node.left)
if pop_node.right is None:
pop_node.right = node
return
else:
queue.append(pop_node.right)
def travel(self):
""" 广度遍历 """
if self.root is None:
return
cur = self.root
queue = [cur]
while queue:
pop_node = queue.pop(0)
print(pop_node.item)
if pop_node.left is not None:
queue.append(pop_node.left)
if pop_node.right is not None:
queue.append(pop_node.right)
def forward(self, root):
""" 前序: 根左右 """
if root is None:
return
print(root.item)
self.forward(root.left)
self.forward(root.right)
def middle(self, root):
""" 中序: 左根右 """
if root is None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
def back(self, root):
""" 中序: 左根右 """
if root is None:
return
self.middle(root.left)
self.middle(root.right)
print(root.item)
tree = Tree()
tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
tree.insert(5)
tree.insert(6)
tree.travel()
tree.forward(tree.root)
tree.middle(tree.root)
tree.back(tree.root)
python代码实现排序二叉树
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8337801972019ca24cc55bd655f19a9a.png)
class Node:
def __init__(self, item):
self.item = item
self.left = None
self.right = None
class SortTree:
def __init__(self):
self.root = None
def add(self, item):
node = Node(item)
if self.root is None:
self.root = node
return
cur = self.root
while cur:
if item > cur.item:
if cur.right is None:
cur.right = node
return
else:
cur = cur.right
else:
if cur.left is None:
cur.left = node
return
else:
cur = cur.left
def middle(self, root):
""" 使用中序出来的就是有序 """
if root is None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
sort_tree = SortTree()
lst = [2, 3, 5, 4, 1, 6, 23, 88, 66]
for i in lst:
sort_tree.add(i)
sort_tree.middle(sort_tree.root)