Python数据结构之二叉树——树的变种
- 二叉树:树的变种,主要节约树在存储时的空间浪费。
- 二叉树的公式
1. 总结点为 n,那么深度就是 2(n)-1。
2. 深度为n,总结点为 log2(n+1)。
3. 度为0的节点 n0 = n2+1
4. 深度在 k 时,最多有 2(k-1) 个元素。 - 二叉树的遍历方式
1. 前序遍历:根左右;
2. 中序遍历:左根右;
3. 后序遍历:左右跟;
代码部分
- 二叉树节点定义
class Tree_Node:
def __init__(self, value):
self.data = value
self.left_node = None
self.right_node = None
- 二叉树的创建
def Create_Tree(ptr: Tree_Node, value: int):
new_node = Tree_Node(value=value)
if not ptr:
ptr = new_node
return ptr
else:
current = ptr
while current:
backup = current
if current.data > value:
current = current.left_node
else:
current = current.right_node
if backup.data > value:
backup.left_node = new_node
else:
backup.right_node = new_node
return ptr
- 前序遍历
def preorder(root_ptr):
if root_ptr:
print(root_ptr.data, end="\t")
preorder(root_ptr.left_node)
preorder(root_ptr.right_node)
- 中序遍历
def inorder(root_ptr):
if root_ptr:
inorder(root_ptr.left_node)
print(root_ptr.data, end="\t")
inorder(root_ptr.right_node)
- 后序遍历
def postorder(root_ptr):
if root_ptr:
postorder(root_ptr.left_node)
postorder(root_ptr.right_node)
print(root_ptr.data, end="\t")
- 总结代码
class Tree_Node:
def __init__(self, value):
self.data = value
self.left_node = None
self.right_node = None
def Create_Tree(ptr: Tree_Node, value: int):
new_node = Tree_Node(value=value)
if not ptr:
ptr = new_node
return ptr
else:
current = ptr
while current:
backup = current
if current.data > value:
current = current.left_node
else:
current = current.right_node
if backup.data > value:
backup.left_node = new_node
else:
backup.right_node = new_node
return ptr
def preorder(root_ptr):
if root_ptr:
print(root_ptr.data, end="\t")
preorder(root_ptr.left_node)
preorder(root_ptr.right_node)
def inorder(root_ptr):
if root_ptr:
inorder(root_ptr.left_node)
print(root_ptr.data, end="\t")
inorder(root_ptr.right_node)
def postorder(root_ptr):
if root_ptr:
postorder(root_ptr.left_node)
postorder(root_ptr.right_node)
print(root_ptr.data, end="\t")
if __name__ == '__main__':
data_array = [6, 3, 5, 4, 7, 8, 9, 2]
root = None
for i in range(len(data_array)):
root = Create_Tree(root, data_array[i])
print("前序遍历: ")
preorder(root)
print("\n中序遍历: ")
inorder(root)
print("\n后序遍历: ")
postorder(root)
"""
数组中的数据: [0, 6, 3, 5, 4, 7, 8, 9, 2]
数组保存的二叉树数据: [0, 6, 3, 7, 2, 5, 0, 8, 0, 0, 4, 0, 0, 0, 0, 9]
"""