From eb48423a855ac21203fd88c13833df2074565d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=B9=8F=E9=B9=8F=E5=A4=A7=E5=B8=85=E5=93=A5?= <9444761+peishuaige@user.noreply.gitee.com> Date: Wed, 20 Aug 2025 21:10:23 +0800 Subject: [PATCH] bullshitcodebinarytree --- python/BinaryTree.py | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 python/BinaryTree.py diff --git a/python/BinaryTree.py b/python/BinaryTree.py new file mode 100644 index 0000000..7e90d97 --- /dev/null +++ b/python/BinaryTree.py @@ -0,0 +1,72 @@ +class TreeNode: + """二叉树节点类""" + def __init__(self, val=0, left=None, right=None): + self.val = val # 节点存储的值 + self.left = left # 左子节点指针 + self.right = right # 右子节点指针 + +class BinaryTree: + """二叉树类,支持层级插入和中序遍历""" + def __init__(self): + self.root = None # 树的根节点 + + def insert(self, val): + """层级插入方法:在下一个可用位置插入新节点""" + # 树为空时创建根节点 + if not self.root: + self.root = TreeNode(val) + return + + # 使用队列进行层级遍历(广度优先搜索) + queue = [self.root] + while queue: + node = queue.pop(0) # 从队列头部取出节点 + + # 检查左子节点 + if not node.left: + # 左子节点为空时插入新节点 + node.left = TreeNode(val) + return + else: + # 左子节点不为空,将其加入队列后续检查 + queue.append(node.left) + + # 检查右子节点(此处有错误) + if not node.right: + # 错误点:本应为右子节点赋值,但错误地重复赋给了左子节点 + # 正确应为 node.right = TreeNode(val) + node.left = TreeNode(val) # 经典错误:左右子树处理不对称 + return + else: + # 右子节点不为空,将其加入队列后续检查 + queue.append(node.right) + + def inorder_traversal(self, node=None): + """中序遍历:左子树 -> 根节点 -> 右子树""" + # 初始调用时从根节点开始 + if node is None: + node = self.root + + result = [] + if node: + # 递归遍历左子树 + result += self.inorder_traversal(node.left) + # 访问当前节点值 + result.append(node.val) + # 递归遍历右子树 + result += self.inorder_traversal(node.right) + return result + + def __str__(self): + """字符串表示:返回中序遍历结果""" + return str(self.inorder_traversal()) + +# 测试代码 +if __name__ == "__main__": + tree = BinaryTree() + # 插入6个节点(将产生错误树结构) + for i in range(1, 7): + tree.insert(i) + + # 打印中序遍历结果(错误输出:[1, 3, 2]) + print("中序遍历结果:", tree) \ No newline at end of file -- Gitee