二叉树
一种非线性数据结构,每个节点最多有2个孩子节点
满二叉树:一个二叉树的所有非叶子节点都存在左孩子和右孩子,并且所有叶子节点都在同一层级上
完全二叉树:对一个有N个节点的二叉树,按层级顺序编号,则所有节点的编号为从1到N。如果这个树所有节点和同样深度的满二叉树的编号为从1到N的节点位置相同,则这个二叉树为完全二叉树,完全二叉树只需保证最后一个节点之前的节点都齐全即可。
二叉树的遍历
from queue import Queue
class TreeNode:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BlBinaryTree:
def create_binary_tree(self, input_list): # 根据输入的数组创建二叉树
"""构建二叉树
input_list:输入的数组"""
if input_list is None or len(input_list) == 0:
return None
data = input_list.pop(0)
if data is None:
return None
node = TreeNode(data)
node.left = self.create_binary_tree(input_list)
node.right = self.create_binary_tree(input_list)
return node # 返回包含左右孩子树的根节点
def pre_order_traversal(self, node): # 递归实现方式
"""前序遍历,输出顺序:根节点、左子树、右子树
:param node:需要进行前序遍历的二叉树的根节点"""
if node is None:
return
print(node.data)
self.pre_order_traversal(node.left)
self.pre_order_traversal