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

【题解】二叉搜索树与双向链表

二叉搜索树与双向链表

题目链接:二叉搜索树与双向链表

解题思路1:递归+中序遍历

首先题目最后要求的是一个的递增的双向链表,而二叉搜索树也是一类非常有特色的树,它的根节点大于所有左侧的节点,同时又小于所有右侧的节点,如果我们按照左中右去遍历这颗二叉树,恰巧得到的就是一个递增序列

题目同时要求不要创建新的节点,这样我们就需要在原有树上进行操作,树有左右节点指针,双向链表有前后两个指针,正好一一对应,我们修改指针指向,结合中序遍历,得到一颗递增的双向链表

代码如下:

	TreeNode* head = nullptr;TreeNode* pre = nullptr;TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree == nullptr) return nullptr;//递归的结束条件Convert(pRootOfTree->left);//递归到最左节点,是最小值if(pre == nullptr){//此时pRootOfTree是最左节点,是链表的head//初始化head和prehead = pRootOfTree;pre = pRootOfTree;}else{//pre是每一个pRootOfTree的前驱节点pre->right = pRootOfTree;pRootOfTree->left = pre;pre = pRootOfTree;}Convert(pRootOfTree->right);return head;}

解题思路2:非递归+栈

我们利用栈先进后出的特性,来模拟中序遍历出所有元素,先让所有左侧的元素进栈,再依次取出其父节点,再找该节点的右节点,将节点进行连接,连接方式和上一种思路一样

    TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree == nullptr) return nullptr;TreeNode* head = nullptr;TreeNode* pre = nullptr;stack<TreeNode*> s;while(pRootOfTree!=nullptr || !s.empty()){while(pRootOfTree!=nullptr){s.push(pRootOfTree);pRootOfTree = pRootOfTree->left;}pRootOfTree = s.top();s.pop();if(pre == nullptr){head = pRootOfTree;pre = pRootOfTree;}else{pre->right = pRootOfTree;pRootOfTree->left = pre;pre = pRootOfTree;}pRootOfTree = pRootOfTree->right;}return head;}
http://www.lryc.cn/news/133542.html

相关文章:

  • 【真实案例】解决后端接口调用偶尔超时问题
  • 操作符详解(1)
  • <指针进阶>指针数组和数组指针傻傻分不清?
  • 无代码集成飞书连接更多应用
  • 三分钟解决AE缓存预览渲染错误、暂停、卡顿问题
  • 朴实无华的数据增强然后训练一下应用在电网异物检测领域,好像有自己的数据集就能发文了
  • 【使用教程】在Ubuntu下运行CANopen通信PMM伺服电机使用教程(NimServoSDK_V2.0.0)
  • vue3+ts+vite项目页面初始化loading加载效果
  • ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步
  • 神经网络基础-神经网络补充概念-18-多个样本的向量化
  • *看门狗1
  • nginx防盗链
  • 8月16日上课内容 第二章 部署LVS-DR群集
  • ViT模型架构和CNN区别
  • 发布python模仿2023年全国职业的移动应用开发赛项样式开发的开源的新闻api,以及安卓接入案例代码
  • adb command
  • 在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)
  • KMP算法(JS)
  • 恢复NuGet包_解决:System.BadImageFormatException:无法加载文件或程序集
  • Django学习笔记(2)
  • 高德地图开发者平台Python应用实践:快速入门周边商业环境信息查询
  • 【ES6】—let 声明方式
  • 【数据分析入门】Jupyter Notebook
  • 反射知识总结
  • MongoDB 安装 linux
  • 什么是KNN( K近邻算法)
  • Linux查看命令总结
  • npm报错 Cannot find module ‘@vuepress\core\node_m
  • mybatis入门环境搭建及CRUD
  • 小程序变化历史记录