二叉树
1 二叉树:
2 二叉树的遍历:
- 广度优先遍历:一层一层对节点进行遍历
- 尝试优先遍历:
3 二叉树的遍历
class Node(object):
def __init__(self, item):
self.item = item
self.left = None
self.right = None
class Tree(object):
def __init__(self):
self.root = None
def add(self, item):
node = Node(item)
# 插入第一个节点情况
if self.root is None:
self.root = node
return
root = self.root
cur_list = [root]
while cur_list:
cur = cur_list.pop(0)
if cur.left is None:
cur.left = node
return
else:
cur_list.append(cur.left)
if cur.right is None:
cur.right = node
return
else:
cur_list.append(cur.right)
def travel(self):
root = self.root
cur_list = [root]
while cur_list:
cur = cur_list.pop(0)
print(cur.item)
if cur.left:
cur_list.append(cur.left)
if cur.right:
cur_list.append(cur.right)
def forward(self, root):
"""
前序:根左右
:param root:
:return:
"""
if root is None:
return
print(root.item)
self.forward(root.left)
self.forward(root.right)
def middle(self, root):
"""
中序:左根右
:param root:
:return:
"""
if root is None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
def back(self, root):
"""
后序:左右根
:param root:
:return:
"""
if root is None:
return
self.back(root.left)
self.back(root.right)
print(root.item)
tree = Tree()
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.travel()
# 1,2,3,4,5,6
tree.forward(tree.root)
# 1,2,4,5,3,6
tree.middle(tree.root)
# 4,2,5,1,6,3
tree.back(tree.root)
# 4,5,2,6,3,1
4 排序二叉树实现排序
class Node(object):
def __init__(self, item):
self.item = item
self.left = None
self.right = None
class Tree(object):
def __init__(self):
self.root = None
def sort_tree(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.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 travel(self):
root = self.root
cur_list = [root]
while cur_list:
cur = cur_list.pop(0)
print(cur.item)
if cur.left:
cur_list.append(cur.left)
if cur.right:
cur_list.append(cur.right)
def middle(self, root):
if root is None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
tree = Tree()
a_list = [94, 3, 86, 99, 19, 78, 28, 55, 47, 31]
for i in a_list:
tree.sort_tree(i)
tree.travel()
# 94,3,99,86,19,78,28,55,47,31
tree.middle(tree.root)
# 3,19,28,31,47,55,78,86,94,99