今天来使用python实现二叉树,二叉树中每个节点都是Node类对象,通过Tree类中的add()方法逐个向二叉树中加入树节点,构成完全二叉树或者非完全二叉树,代码如下:
class Node(object):"""树节点类,用于构建二叉树。Attributes:- val: 节点存储的值。- right: 右子节点的引用。- left: 左子节点的引用。"""def __init__(self, val=None, right=None, left=None):self.val = val # 初始化节点值self.left = left # 初始化左子节点为Noneself.right = right # 初始化右子节点为Noneclass Tree(object):"""树类,用于管理二叉树。Attributes:- root: 树的根节点。"""def __init__(self, node=None):self.root = node # 初始化树的根节点为None或传入的节点def add(self, item=None):"""向树中添加一个新的节点。Args:- item: 新节点的值。"""node = Node(val=item) # 创建一个新的节点if not self.root or self.root.val is None: # 如果树为空或根节点值为Noneself.root = node # 将新节点设置为根节点else:queue = [] # 使用队列来实现层序遍历queue.append(self.root) # 将根节点加入队列while True: # 循环直到找到合适的插入位置current_node = queue.pop(0) # 从队列中取出一个节点if current_node.val is None: # 如果当前节点值为None,跳过continueif not current_node.left: # 如果当前节点的左子节点为空current_node.left = node # 将新节点设置为左子节点return # 返回,结束添加操作elif not current_node.right: # 如果当前节点的右子节点为空current_node.right = node # 将新节点设置为右子节点return # 返回,结束添加操作else: # 如果当前节点的左右子节点都不为空queue.append(current_node.left) # 将左子节点加入队列queue.append(current_node.right) # 将右子节点加入队列
接下来使用自定义二叉树类,将得到一棵二叉树:
tree = Tree()
for i in range(10):if i == 3:i = Nonetree.add(i)