一、二叉查找树
1.理解树和图的术语和表示
2.理解二叉搜索树的重要性
3.在二叉查找树中实现插入、搜索和遍历
树是一种非线性的数据结构。它基本上是一个图,不形成任何循环,没有孤立的边或顶点。
如果树的每个节点都有两个子节点,除了最后一层没有子节点之外,就称为完全二叉树。
树的术语;
树的创建:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def PrintTree(self):
print(self.data)
root = Node(10)
root.PrintTree()
树的插入:
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def insert(self, data):
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
root = Node(1)
root.insert(3)
root.insert(6)
root.insert(10)
root.PrintTree()
树遍历:中序、前序和后序.
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def insert(self, data):
if self.data:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data > self.data:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
else:
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
# 中序遍历
# Left -> Root -> Right
def inorderTraversal(self, root):
res = []
if root:
res = self.inorderTraversal(root.left)
res.append(root.data)
res = res + self.inorderTraversal(root.right)
return res
#先序遍历
#Root->Left->Right
def PreorderTraversal(self, root):
res = []
if root:
res.append(root.data)
res = res + self.PreorderTraversal(root.left)
res = res + self.PreorderTraversal(root.right)
return res
#后序遍历
#Left->Right->Root
def PostorderTraversal(self, root):
res =[]
if root:
res = self.PostorderTraversal(root.left)
res = res + self.PostorderTraversal(root.right)
res.append(root.data)
return res
root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.PrintTree()
print(root.inorderTraversal(root))
print(root.PreorderTraversal(root))
print(root.PostorderTraversal(root))
结果:
10
14
27
35
[10, 14, 27, 35]
[27, 14, 10, 35]
[10, 14, 35, 27]