二叉搜索树的插入与删除图解
一、二叉搜索树(BSTree)的概念
二、二叉搜索树的插入
三、二叉搜索树的删除
1 bool Insert(const K& key) 2 { 3 if (_root == NULL) 4 { 5 _root = new Node(key); 6 return true; 7 } 8 Node* parent=NULL; 9 Node* pcur = _root; 10 while (pcur) 11 { 12 if (pcur->_key == key) //有key节点,则不再插入 13 return false; 14 if (pcur->_key > key) 15 { 16 parent = pcur; 17 pcur = pcur->_left; 18 } 19 else if (pcur->_key < key) 20 { 21 parent = pcur; 22 pcur = pcur->_right; 23 } 24 } 25 if (parent->_key < key) 26 parent->_right = new Node(key); 27 else 28 parent->_left = new Node(key); 29 return true; 30 }
2、二叉搜索树的删除操作 bool Remove(const K& key)
1 bool Remove(const K& key) 2 { 3 assert(_root); 4 Node* parent = NULL; 5 Node* pcur = _root; 6 Node* del = pcur; 7 while (pcur != NULL && pcur->_key != key) 8 { 9 if (pcur->_key > key) 10 { 11 parent = pcur; 12 pcur = pcur->_left; 13 } 14 else if (pcur->_key < key) 15 { 16 parent = pcur; 17 pcur = pcur->_right; 18 } 19 } 20 if (pcur == NULL) 21 return false; 22 if (pcur->_left == NULL) //只有右孩子 23 { 24 //如果pcur就是根节点的话,让根节点指向根的右 25 if (pcur == _root) 26 _root = pcur->_right; 27 else if (pcur == parent->_left) 28 { 29 parent->_left = pcur->_right; 30 } 31 else 32 { 33 parent->_right = pcur->_right; 34 } 35 del = pcur; 36 } 37 else if (pcur->_right == NULL) //只有左孩子 38 { 39 //如果是根节点,让根节点指向根的左 40 if (pcur == _root) 41 _root = pcur->_left; 42 else if (parent->_left == pcur) 43 { 44 parent->_left = pcur->_left; 45 } 46 else 47 parent->_right = pcur->_left; 48 del = pcur; 49 } 50 //pcur左右孩子都不为空 51 else 52 { 53 //找到节点右子树的最左节点 54 Node* left = pcur->_right; 55 parent = pcur; 56 while (left->_left) 57 { 58 parent=left; 59 left = left->_left; 60 } 61 del = left; 62 pcur->_key = left->_key; //交换节点的值 63 if (parent->_left == left) 64 { 65 parent->_left = left->_right; 66 } 67 else 68 { 69 parent->_right = left->_right; 70 } 71 72 } 73 delete del; 74 return true; 75 }
转载于:https://www.cnblogs.com/MrListening/p/5782752.html
二叉搜索树的插入与删除图解相关推荐
- 二叉搜索树的插入与删除(C语言)
代码如下: BinTree Insert( BinTree BST, ElementType X ) {if( !BST ){ /* 若原树为空,生成并返回一个结点的二叉搜索树 */BST = (Bi ...
- 二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)
目录 1.leetcode 701. 二叉搜索树中的插入操作 1.题目 2.递归法 3.迭代法 2.leetcode 450. 二叉搜索树中的插入操作 1.题目 2.思路+递归法 3.迭代法 4.删除 ...
- 二叉搜索树的插入,删除,和中序遍历
构建一个值的类型为int的二叉搜索树,输入N和M,然后进行N次插入操作,每次插入之后进行一次遍历验证代码正确性.然后进行M次删除操作,每次删除之后进行一次遍历验证代码正确性. #include &qu ...
- 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。
1.1 二叉搜索树的插入 二叉搜索树的概念相信大家都很清楚,无非就是左小右大 创建二叉搜索树,其实就是多次调用二叉搜索树的插入方法,所以首先我们来讲讲如何插入节点到二叉搜索树里,假设一颗二叉搜索树如下 ...
- 二叉平衡树的插入和删除操作
[转载]二叉平衡树的插入和删除操作 1. 二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...
- 二叉搜索树的创建以及删除
#include <stdio.h> #include <stdlib.h> #define EOR -1typedef int EleType;//typedef 定义存放数 ...
- 二叉堆(插入、删除)
二叉堆分为大顶堆和小顶堆,是一颗完全二叉树.但是实际上的存储一般用数组存储. 大顶堆:任何父节点都比子节点大,但左右子节点大小情况任意. 小顶堆:任何父节点都比子节点小,但左右子节点大小情况任意. t ...
- 二叉搜索树(BST)删除节点--思路清晰
前言:在学习BST时,发现查找插入等操作都很好理解和实现,而删除节点的操作情况比较复杂,故通过自己的理解整理如下,本文适合初学者理解并自己动手实现BST删除操作. 在很多文章中提到,删除节点可以考虑以 ...
- leetcode 701 二叉搜索树的插入操作 C++ 递归和迭代
迭代 class Solution {public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(!root) return new Tre ...
最新文章
- pythonweb开发-一步步教你开始使用Python开发Web应用
- Java反射 - 2(对象复制,父类域,内省)
- 面向任务的 Git 学习法
- CenterOs 防火墙设置
- 微信公招访问我服务器的那个端口,查看谁在使用某个网络端口
- 技术人员要分出2成精力防范内斗及斗争方法
- 容器就业市场持续增长,5条建议让您快速掌握Docker技能
- chrome官网下载离线安装包
- 中冠百年|到了30岁应该如何增加收入?
- 视觉中国,董事长是加拿大籍,总裁是美国籍
- T0.Games欢迎高端加密NFT入驻
- bi 工具 市场排行榜_bi工具市场排行榜,国内BI软件排名
- Windows 7 插件KB4474419安装 Symantec Endpoint Protection 只能安装在具有SHA-2代码签名支持更新(KB4474419)的系统上
- 基片集成波导天线设计基础
- 管理之路:你的格局,决定你的结局
- python模拟预测孩子身高_这个公式可以帮你预测你家孩子身高
- (1)大数据和应用场景介绍
- 抖音一般多久能上热门 视频修改MD5工具
- scanpy 单细胞分析包图文详解 01 | 深入理解 AnnData 数据结构
- linux centos 解压 tar.bz2文件