Python 二叉树的基本操作实现

news/2024/9/23 1:07:54/

在Python中实现二叉树的基本操作通常涉及以下步骤:

  1. 定义二叉树节点:创建一个类来表示二叉树的节点,通常包含一个数据属性和指向左右子节点的指针。

  2. 创建二叉树:允许用户输入数据来构建二叉树。

  3. 遍历二叉树:实现前序、中序、后序遍历,以及层序遍历。

  4. 搜索节点:在二叉树中搜索特定值的节点。

  5. 插入节点:在二叉树中插入新节点。

  6. 删除节点:从二叉树中删除特定节点。

  7. 获取树的高度:计算二叉树的高度。

以下是这些基本操作的一个简单实现:

class TreeNode:def __init__(self, value):self.value = valueself.left = Noneself.right = Noneclass BinaryTree:def __init__(self):self.root = Nonedef insert(self, value):if not self.root:self.root = TreeNode(value)else:self._insert(self.root, value)def _insert(self, node, value):if value <= node.value:if node.left is None:node.left = TreeNode(value)else:self._insert(node.left, value)else:if node.right is None:node.right = TreeNode(value)else:self._insert(node.right, value)def delete(self, value):self.root = self._delete(self.root, value)def _delete(self, node, value):if node is None:return nodeif value < node.value:node.left = self._delete(node.left, value)elif value > node.value:node.right = self._delete(node.right, value)else:if node.left is None:return node.rightelif node.right is None:return node.leftmin_larger_node = self._min_value_node(node.right)node.value = min_larger_node.valuenode.right = self._delete(node.right, min_larger_node.value)return nodedef _min_value_node(self, node):current = nodewhile current.left is not None:current = current.leftreturn currentdef height(self):return self._height(self.root)def _height(self, node):if node is None:return 0return 1 + max(self._height(node.left), self._height(node.right))def traverse(self, order='preorder'):if order == 'preorder':self._preorder(self.root)elif order == 'inorder':self._inorder(self.root)elif order == 'postorder':self._postorder(self.root)elif order == 'levelorder':self._levelorder(self.root)else:print("Invalid traversal order")def _preorder(self, node):if node:print(node.value, end=' ')self._preorder(node.left)self._preorder(node.right)def _inorder(self, node):if node:self._inorder(node.left)print(node.value, end=' ')self._inorder(node.right)def _postorder(self, node):if node:self._postorder(node.left)self._postorder(node.right)print(node.value, end=' ')def _levelorder(self, node):if node is None:returnqueue = [node]while queue:current = queue.pop(0)print(current.value, end=' ')if current.left:queue.append(current.left)if current.right:queue.append(current.right)# 使用示例
bt = BinaryTree()
bt.insert(7)
bt.insert(3)
bt.insert(9)
bt.insert(1)
bt.insert(5)
bt.insert(8)
bt.insert(10)print("Preorder Traversal:", end=' ')
bt.traverse('preorder')print("\nInorder Traversal:", end=' ')
bt.traverse('inorder')print("\nPostorder Traversal:", end=' ')
bt.traverse('postorder')print("\nLevelorder Traversal:", end=' ')
bt.traverse('levelorder')print("\nHeight of the tree:", bt.height())bt.delete(7)
print("\nTree after deleting 7:", end=' ')
bt.traverse('inorder')

这段代码定义了一个TreeNode类来表示二叉树的节点,以及一个BinaryTree类来实现二叉树的创建、插入、删除、遍历和高度获取等操作。在示例中,我们创建了一个二叉树,执行了各种遍历,并计算了树的高度,最后演示了删除节点的操作。


http://www.ppmy.cn/news/1434806.html

相关文章

【前端技术】CSS基础入门篇

一、 CSS简介 css&#xff08;Cascading Style Sheets&#xff0c;缩写为 CSS&#xff0c;也叫作层叠样式表&#xff09;是一套美化HTML标签所编写出页面的语法&#xff0c;CSS描述了如何在不同设备上渲染内容的方法。 二、 CSS基本引入方法 <!-- Cascading style shet:层…

QWidget | Qt::WindowType 枚举的取值及意义QFlags 模板类详解

01 与 QWidget 类有关的部分类的继承图 3、QObject 是所有 Qt 对象的基类,QPaintDevie 是所有可绘制对象的基类。 4、QWidget 类是所有用户界面对象的基类,QWidget 及其子类是开发桌面应用的核心,这些类都位于 QtWidgets 模块内,注意:QtWidgets 是模块,QWidget 是类(少一…

2024蓝桥杯每日一题(分解质因数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;约数个数 试题二&#xff1a;分解质因数 试题三&#xff1a;质因数个数 试题四&#xff1a;完全平方数 试题五&#xff1a;阶乘分解 试题一&#xff1a;约数个数 【题目描述】…

小白人群想找通信网优的工作,需要注意什么?

6月毕业季&#xff0c;距离各大院校学生毕业时间不足2个月&#xff0c;有些求职者已经开始投递简历&#xff0c;明确自己未来的发展方向。 一些小伙伴们也纷纷后台私信我们想找通信网优的工作&#xff0c;因为学校开设的相关课程比较少&#xff0c;不知道学什么才比较好找这方面…

[NSSCTF]-Reverse:[HUBUCTF 2022 新生赛]simple_RE(base64换表)

无壳 查看ida 可以看得出是base64&#xff0c;而且是换表的。 完整exp&#xff1a; import base64 result5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8 biaostr.maketrans(qvEJAfHmUYjBacu8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD,ABCDEFGHIJKLMNOPQR…

SpringBoot+Vue开发记录(四)

说明&#xff1a; 本篇文章的主要内容是软件架构以及项目的前端Vue创建 一、软件架构 我道听途说的&#xff0c;听说这个东西很关键很重要什么的。 软件架构&#xff08;software architecture&#xff09;是一个系统的草图,是一系列相关的抽象模式&#xff0c;用于指导大型软…

【苍穹外卖】HttpClient-快速理解入门

目录 HttpClient-快速理解&入门1. 需求2. 如何使用3. 具体示例4. 大致优点5. 大致缺点 HttpClient-快速理解&入门 1. 需求 在平常访问服务器里面的资源的时候&#xff0c;我们通常是通过浏览器输入网址&#xff08;或者在浏览器点击某个连接&#xff09;这种方式&…

同旺科技 USB TO SPI / I2C适配器读写24LC128--读写

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、24LC128芯片&#xff1b; 适应于同旺科技 USB TO SPI / I2C适配器专业版&#xff1b; 专业版配套软件更新&#xff1b; 直接读取HEX文件&#xff0c;自动完成文件解析&#xff1b; 支持芯片&#xf…