二叉排列树的基本运算

时间: 2023-07-24 11:19:52 浏览: 43
二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,它满足以下条件: 1. 左子树上所有节点的值均小于它的根节点的值; 2. 右子树上所有节点的值均大于它的根节点的值; 3. 左右子树也都是二叉排序树。 基本运算包括: 1. 创建 对于一个空树,直接将新节点插入作为根节点即可。对于非空树,从根节点开始,比较要插入的节点值与当前节点值的大小关系,如果比当前节点值小,则向左子树递归插入;如果比当前节点值大,则向右子树递归插入。 2. 查找 从根节点开始,如果要查找的节点值等于当前节点值,则返回当前节点;如果要查找的节点值小于当前节点值,则向左子树递归查找;如果要查找的节点值大于当前节点值,则向右子树递归查找。如果最后找不到该节点,则返回空。 3. 插入 从根节点开始,比较要插入的节点值与当前节点值的大小关系,如果比当前节点值小,则向左子树递归插入;如果比当前节点值大,则向右子树递归插入。如果最后找到该节点,则不插入,如果没有找到该节点,则将新节点插入到对应的位置。 4. 删除 删除节点分为三种情况: - 要删除的节点没有子节点,直接删除即可; - 要删除的节点只有一个子节点,将其子节点替换为该节点; - 要删除的节点有两个子节点,需要找到该节点的中序遍历的后继节点(即右子树中最小的节点),将其值赋给要删除的节点,然后删除该后继节点。 5. 遍历 - 前序遍历:先遍历根节点,然后递归遍历左子树和右子树。 - 中序遍历:先递归遍历左子树,然后遍历根节点,最后递归遍历右子树。 - 后序遍历:先递归遍历左子树和右子树,然后遍历根节点。 以下是二叉排序树的算法实现: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None class BST: def __init__(self): self.root = None # 创建二叉排序树 def insert(self, val): if self.root is None: self.root = TreeNode(val) else: self._insert(self.root, val) def _insert(self, node, val): if val < node.val: if node.left is None: node.left = TreeNode(val) else: self._insert(node.left, val) else: if node.right is None: node.right = TreeNode(val) else: self._insert(node.right, val) # 查找二叉排序树 def search(self, val): return self._search(self.root, val) def _search(self, node, val): if node is None or node.val == val: return node elif val < node.val: return self._search(node.left, val) else: return self._search(node.right, val) # 删除二叉排序树 def remove(self, val): self.root = self._remove(self.root, val) def _remove(self, node, val): if node is None: return node if val < node.val: node.left = self._remove(node.left, val) elif val > node.val: node.right = self._remove(node.right, val) else: if node.left is None: temp = node.right node = None return temp elif node.right is None: temp = node.left node = None return temp temp = self._minValueNode(node.right) node.val = temp.val node.right = self._remove(node.right, temp.val) return node def _minValueNode(self, node): current = node while current.left is not None: current = current.left return current # 遍历二叉排序树 def preorder_traversal(self): self._preorder_traversal(self.root) def _preorder_traversal(self, node): if node is not None: print(node.val) self._preorder_traversal(node.left) self._preorder_traversal(node.right) def inorder_traversal(self): self._inorder_traversal(self.root) def _inorder_traversal(self, node): if node is not None: self._inorder_traversal(node.left) print(node.val) self._inorder_traversal(node.right) def postorder_traversal(self): self._postorder_traversal(self.root) def _postorder_traversal(self, node): if node is not None: self._postorder_traversal(node.left) self._postorder_traversal(node.right) print(node.val) ```

相关推荐

最新推荐

recommend-type

二叉排序树运算课程设计报告

基本任务:(1)选择合适的存储结构构造二叉排序树;(2) 对二叉排序树T作中序遍历,输出结果;(3)在二叉排序树中实现多种方式的查找,并给出二叉排序树中插入和删除的操作。(4)尽量给出“顺序和链式”两种不同...
recommend-type

数字信号处理实验报告-(1)-时域离散信号的基本运算.doc

数字信号处理实验报告-(1)-时域离散信号的基本运算,有代码,几乎每行都有注释,高清原图,完全能看得懂的那种
recommend-type

数据结构_图的基本运算代码

#include"MGraph.h" #define INFTY 1000 template struct ENode { ENode() {nextArc=NULL;} ENode(int vertex,T weight,ENode *next) { adjVex=vertex; w=weight; nextArc=next; } int adjVex;...
recommend-type

Numpy——numpy的基本运算

矩阵的逻辑运算8.二维矩阵计算9.sum(), min(), max()的使用10.行和列的查找运算11.最大值、最小值的索引12.均值、平均值、中位数13.累加、累差14.排序15.转置16.clip()函数 1.初始化两个矩阵 import numpy as np a=...
recommend-type

C++稀疏矩阵的各种基本运算并实现加法乘法

今天小编就为大家分享一篇关于C++稀疏矩阵的各种基本运算并实现加法乘法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。