当前位置: 首页 > news >正文

排序二叉树c++

排序二叉树c++

    • 分类一
    • 分类二 单侧有孩子
    • 分类三 双侧有孩子
      • 1左孩子没有右孩子
      • 2左孩子有右孩子

实际删除节点的过程中移花截木,把数据交换,然后递归。

#include <iostream>
using namespace std;
struct BiTree{int data;BiTree *left;BiTree * right;BiTree(int x){data=x;left=right=NULL;}~BiTree(){if(left) delete left;if(right) delete right;}void add(BiTree* t){if(t->data<data)if(left)left->add(t);elseleft=t;elseif(right)right->add(t);elseright=t;}void in_order(){if(left) left->in_order();cout<<data<<" ";if(right) right->in_order();}BiTree* del(){// 分类一,叶子节点if(left==NULL && right==NULL){delete this;return NULL;}//分类二,只有右子树if(left==NULL){BiTree* t=right;right=NULL;delete this;return t;}//分类二,只有左子树if(right==NULL){BiTree* t=left;left=NULL;delete this;return t;}//分类三 左孩子没有右孩子if(left->right==NULL){data=left->data;left=left->del();return this;}//分类三 左孩子有右孩子BiTree* p=left;while(p->right->right) p=p->right;data=p->right->data;p->right=p->right->del();return this;}
};
int main(){int data[]={12,3,7,16,2,18,9,7,2,5,11};BiTree* root=new BiTree(data[0]);for(int i=1;i<sizeof(data)/sizeof(int);i++)root->add(new BiTree(data[i]));root->in_order();cout<<endl;root=root->del();root->in_order();cout<<endl;return 0;
}

#分类删节点

分类一

  • 删叶子结点
删除

分类二 单侧有孩子

  • 左侧有孩子
删除
左孩
  • 右侧有孩子
删除
右孩

分类三 双侧有孩子

1左孩子没有右孩子

B
C
D

2左孩子有右孩子

B
C
D
E
G
H

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数字化精益生产系统--APS 排程管理系统
  • Linux Conda 入门案例教程
  • 函数返回值不能作为函数重载的条件,C++的函数重载是基于函数名和参数列表来识别的,而不是基于返回类型。
  • c++11新特性-6-using
  • uniapp中实现跳转链接到游览器(安卓-h5)
  • Java中的日期时间类详解(Date、DateFormat、Calendar)
  • 搜狐新闻HarmonyOS版本 push 推送开发
  • 【linux/shell】shell中实现函数重载
  • 安卓gdb 建立链接
  • Qt 基础组件速学 鼠标和键盘事件
  • 二叉树的遍历算法:前序、中序与后序遍历
  • springcloud-alibba之FeignClient
  • 5.基于SpringBoot的SSMP整合案例-数据层开发
  • Virtualbox和ubuntu之间的关系
  • JMeter--定时执行的方法
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【EOS】Cleos基础
  • EOS是什么
  • MySQL QA
  • SpiderData 2019年2月25日 DApp数据排行榜
  • windows下mongoDB的环境配置
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端性能优化——回流与重绘
  • 前端学习笔记之观察者模式
  • 使用agvtool更改app version/build
  • 数组的操作
  • 为什么要用IPython/Jupyter?
  • linux 淘宝开源监控工具tsar
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #宝哥教你#查看jquery绑定的事件函数
  • $forceUpdate()函数
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (145)光线追踪距离场柔和阴影
  • (a /b)*c的值
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (二十六)Java 数据结构
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十一)图像的罗伯特梯度锐化
  • (译) 函数式 JS #1:简介
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CORE Aws S3 使用
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET业务框架的构建
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .NET中的Exception处理(C#)