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

100题_01 把二元查找树转变成排序的双向链表

输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。比如将二元查找树
10 /   \ 6     14 / \    / \ 4 8 12 16 转换成双向链表4=6=8=10=12=14=16。   分析:可以采用递归的思想,先将左子树转成双向列表,再将右子树转成双向列表,最后将这两个双向列表及根结点组首尾相接,组合成一个双向列表。   以下是实现的代码: BSTreeNode.h
View Code
#pragma  once #include  < cstdlib > using   namespace  std; class  BSTree; class  BSTreeNode { friend  class  BSTree; public : BSTreeNode( int  data, BSTreeNode  * rc  =  NULL, BSTreeNode  * lc  =  NULL); private : int  data; BSTreeNode  * rc; BSTreeNode  * lc; };
BSTreeNode.cpp
View Code
#include  " BSTreeNode.h " BSTreeNode::BSTreeNode( int  data, BSTreeNode  * rc, BSTreeNode  * lc) { this -> data  =  data; this -> lc  =  lc; this -> rc  =  rc; }
BSTree.h
View Code
#pragma  once #include  " BSTreeNode.h " class  BSTree { public : BSTree( void ); ~ BSTree( void ); void  insert( int  data); void  convertToDoubleList(); private : BSTreeNode *  root; void  del(BSTreeNode *  node); BSTreeNode *  convertToDoubleList(BSTreeNode  *& node); };
BSTree.cpp
View Code
#include  " BSTree.h " #include  < cstdlib > using   namespace  std; BSTree::BSTree( void ) { root  =  NULL; } void  BSTree::insert( int  data) { if  (root  ==  NULL) { root  =   new  BSTreeNode(data); } else { BSTreeNode  * cur,  * pre; pre  =  NULL; cur  =  root; while  ( true ) { pre  =  cur; if  (cur -> data  <=  data) { cur  =  cur -> rc; if  ( ! cur) { pre -> rc  =   new  BSTreeNode(data); break ; } } else { cur  =  cur -> lc; if  ( ! cur) { pre -> lc  =   new  BSTreeNode(data); break ; } } } } } BSTree:: ~ BSTree( void ) { } void  BSTree::del(BSTreeNode  * node) { if  (node  ==  NULL) return ; del(node -> lc); del(node -> rc); delete node; root  =  NULL; } BSTreeNode *  BSTree::convertToDoubleList(BSTreeNode *&  node) { if  (node  ==  NULL) return  NULL; BSTreeNode  * lf,  * lt,  * rf,  * rt,  * f,  * t; lf  =  node -> lc; rf  =  node -> rc; lt  =  convertToDoubleList(lf); rt  =  convertToDoubleList(rf); if  (lt  !=  NULL) { lt -> rc  =  node; f  =  lf; } else =  node; node -> lc  =  lt; node -> rc  =  rf; if  (rf  !=  NULL) { rf -> lc  =  node; t  =  rt; } else =  node; node  =  f; return  t; } void  BSTree::convertToDoubleList() { convertToDoubleList(root); }
main.cpp
View Code
#include  < iostream > #include  " BSTree.h " using   namespace  std; int  main() { BSTree tr; tr.insert( 10 ); tr.insert( 7 ); tr.insert( 8 ); tr.insert( 52 ); tr.convertToDoubleList(); return   0 ; }
 

相关文章:

  • 哪本书是对程序员最有影响、每个程序员都该阅读的书?
  • 监理资质-《信息系统监理师辅导教程》(电子版)上册勘误
  • Linux系统下MySQL数据库服务器字符集设置
  • Microsoft Visual Studio 2010 Service Pack 1 正式版官方下载地址
  • 基于IDS的各种软件和硬件测试方法
  • Thinking
  • 五、WebService会话Session的管理
  • rhel6-体验无人值守安装RHEL6
  • Java快速开发平台:J-Hi
  • 3.23
  • JQuery概念
  • 2011年3月四级网络工程师笔试试卷 参考答案
  • Windows Phone 7 Perst数据库的一些常用的类和方法
  • 三次握手理解
  • jsp对象实例讲解(一) request对象
  • avalon2.2的VM生成过程
  • ES6语法详解(一)
  • hadoop集群管理系统搭建规划说明
  • MQ框架的比较
  • node和express搭建代理服务器(源码)
  • Rancher-k8s加速安装文档
  • SpiderData 2019年2月23日 DApp数据排行榜
  • TCP拥塞控制
  • vue 个人积累(使用工具,组件)
  • 程序员最讨厌的9句话,你可有补充?
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 实现简单的正则表达式引擎
  • 探索 JS 中的模块化
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • kubernetes资源对象--ingress
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​ArcGIS Pro 如何批量删除字段
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #include
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ZT)出版业改革:该死的死,该生的生
  • (办公)springboot配置aop处理请求.
  • (超详细)语音信号处理之特征提取
  • (二十四)Flask之flask-session组件
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (九十四)函数和二维数组
  • (七)理解angular中的module和injector,即依赖注入
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @FeignClient注解,fallback和fallbackFactory
  • @Transient注解
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛