二叉树C++ | 实现删除节点_4
删除节点
/* Deleting a node from Binary search tree */
#include<iostream>
using namespace std;
struct Node {int data;struct Node *left;struct Node *right;
};
//Function to find minimum in a tree.
Node* FindMin(Node* root)
{while(root->left != NULL) root = root->left;return root;
}// Function to search a delete a value from tree.
struct Node* Delete(struct Node *root, int data) {if(root == NULL) return root; else if(data < root->data) root->left = Delete(root->left,data);else if (data > root->data) root->right = Delete(root->right,data);// Wohoo... I found you, Get ready to be deleted else {// Case 1: No childif(root->left == NULL && root->right == NULL) { delete root;root = NULL;}//Case 2: One child else if(root->left == NULL) {struct Node *temp = root;root = root->right;delete temp;}else if(root->right == NULL) {struct Node *temp = root;root = root->left;delete temp;}// case 3: 2 childrenelse { struct Node *temp = FindMin(root->right);root->data = temp->data;root->right = Delete(root->right,temp->data);}}return root;
}//Function to visit nodes in Inorder
void Inorder(Node *root) {if(root == NULL) return;Inorder(root->left); //Visit left subtreeprintf("%d ",root->data); //Print dataInorder(root->right); // Visit right subtree
}// Function to Insert Node in a Binary Search Tree
Node* Insert(Node *root,char data) {if(root == NULL) {root = new Node();root->data = data;root->left = root->right = NULL;}else if(data <= root->data)root->left = Insert(root->left,data);else root->right = Insert(root->right,data);return root;
}int main() {/*Code To Test the logicCreating an example tree5/ \3 10/ \ \1 4 11*/Node* root = NULL;root = Insert(root,5); root = Insert(root,10);root = Insert(root,3); root = Insert(root,4); root = Insert(root,1); root = Insert(root,11);// Deleting node with value 5, change this value to test other casesroot = Delete(root,5);//Print Nodes in Inordercout<<"Inorder: ";Inorder(root);cout<<"\n";
}
算法和数据结构是程序的第一秘诀,缺之算法和数据结构是编程的最大原因。
二叉树C++ | 实现删除节点_4相关推荐
- 最完整二叉树删除节点
二叉树删除节点 在自己研究二叉树删除节点时,查网上资料时发现,网上大部分写的都是错的,主要错在当删除的节点既存在左子树,又存在右子树时,在中序遍历后获取后继节点后,大部分文章未考虑后继节点存在右子树的 ...
- 二叉树删除节点以及前中后序遍历
public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...
- Javascript -- 二叉树(查找删除功能实现)
查找最大值 //查找最大值,根节点的右边比根节点的值大 var maxNode = function (node) {if (node) {//只要不为空,一直搜寻while (node && ...
- 红黑树添加和删除节点原理
红黑树添加和删除原理 一.概念 二.特性 三.应用 四.基本操作--插入 1.简介 2.插入规则 3.红黑树插入的4种情形 4.插入图例 五.基本操作--删除 1.红黑树删除的情形 2.插入图例 转载 ...
- BST 递归实现二叉树: 插入 删除 查找
二叉树遍历: 前序遍历: 本身 左子树 右子树 中序遍历: 左子树 本身 右子树 从小到大排列 后续遍历: 左子树 右子树 本身 二叉树前驱: 当前节点左子树最大的节点 二叉树后继: 当前节点右子树最 ...
- 二叉搜索树(BST)删除节点--思路清晰
前言:在学习BST时,发现查找插入等操作都很好理解和实现,而删除节点的操作情况比较复杂,故通过自己的理解整理如下,本文适合初学者理解并自己动手实现BST删除操作. 在很多文章中提到,删除节点可以考虑以 ...
- 算法:二叉搜索树BST - 删除节点 详解(Java实现)
删除节点 删除节点存在 3 种情况,几乎所有类似博客都提到了这点.这 3 种情况分别如下: 没有左右子节点,可以直接删除 存在左节点或者右节点,删除后需要对子节点移动 同时存在左右子节点,不能简单的删 ...
- solr-cloud 集群动态增加、删除节点
本次讲述动态增加节点基于上一章集群搭建的基础上来讲:https://blog.csdn.net/u013490585/article/details/86494476 上一章的例子中用了3台zk,4台 ...
- c语言结点初始化,C语言双向链表简单实现及图示(初始化/插入节点/删除节点)...
-------------------------------------------- 双向链表 - - - - - - - - - - - - - - - - - - - - - - - - - ...
最新文章
- JVM体系结构101:了解您的虚拟机
- 云笔记/笔记软件工具
- ip查看是否在线_linux查看端口占用情况
- Linux自动注销登录的帐户
- Android移植之自定义ProgressBar
- SGU---104 DP
- c++ DLL-DEF-LIB
- 【距离GDOI:136天】 后缀数组中...
- 非合作博弈篇——非合作博弈论问题的表示(strategic form)
- MTK 刷机工具操作说明(多路)
- 人民币对澳元汇率的大数据分析与预测
- 2021年新版阿里云服务器价格表(收费标准报价)
- 福利:推荐一个免费的抠图网站
- 计算机可移动磁盘无法显示图片,移动硬盘不显示盘符原因及解决方法步骤介绍【图文详解】...
- 唐巧iOS博客好文列表
- 【云计算】一文了解裸金属服务器(一)
- DNS工作原理及解析过程
- 制作一个货币汇率转换器
- 虚拟串口软件:VSPD的使用
- java根据年份获取年份下的所有月份
热门文章
- c语言错误writing,C语言编译器的错误信息
- Android 短信数据库重要table字段解释
- Android笔记 - android 类型转化错误
- js学习 字符串常用方法
- c++语言中的循环语句有,C++语言中的循环语句
- 设置Markdown中展示Liquid(Jekyll)但不解析的方式
- 连接路由器后电脑连不上网_猫、路由器、交换机的区别
- Spark入门实战系列--4.Spark运行架构
- Spark 性能相关参数配置详解-任务调度篇
- is not a function_libcxx 的 std::function 源码分析