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

【LeetCode】剑指 Offer(19)

目录

题目:剑指 Offer 36. 二叉搜索树与双向链表 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 36. 二叉搜索树与双向链表 - 力扣(Leetcode)

题目的接口:

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
*/
class Solution {
public:Node* treeToDoublyList(Node* root) {}
};

解题思路:

这道题,我的想法就是:

中序遍历这一棵二叉搜索树,

然后让他的头指向尾,尾指向头,

递归让每个节点都做一遍,就形成双向链表。

首先中序遍历找到第一个节点cur:

 更新头节点,然后让他指向尾节点,

等找到尾节点时,让尾节点再指向头节点:

 然后继续找下一个头节点与尾节点互指:

 以此类推,

直到中序遍历完整棵二叉搜索树,

最后,再将最开始的头节点head指向最后的尾节点,

最后的尾节点再指向head,

再返回双向链表的头head即可。

代码:

/*
// Definition for a Node.
class Node {
public:int val;Node* left;Node* right;Node() {}Node(int _val) {val = _val;left = NULL;right = NULL;}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;}
};
*/
class Solution {
public:Node* treeToDoublyList(Node* root) {//判断树是否为空if(root == nullptr){return nullptr;}//中序遍历dfs(root);//头节点指向尾head->left = pre;//尾节点指向头pre->right = head;return head;}
private://创建头尾节点指针Node* head, *pre;//中序遍历实现void dfs(Node* cur){//遍历到底了,返回上一级if(cur == nullptr){return;}//递归左子树dfs(cur->left);//之后每一次到这里,让尾节点指向头节点if(pre != nullptr){pre->right = cur;}else//第一次到这里的时候,让头指针指向cur(中序遍历第一个节点){head = cur;}//让头节点指向尾节点cur->left = pre;//更新尾节点pre = cur;//递归右子树dfs(cur->right);}
};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

http://www.lryc.cn/news/35391.html

相关文章:

  • 吐血整理,web自动化测试,POM模式搭建自动化测试框架(超级详细)
  • 【数据库原理复习】索引 视图 sql语句
  • 【HDFS】IPC重试
  • Revit导出CAD图纸操作及批量导出
  • 【批处理脚本】-3.4-goto命令详解
  • 超详细CentOS7 NAT模式(无图形化界面即最小安装)网络配置
  • 【可信平台】开证问题汇总--1.无采购入库记录,2.箱码无产出记录
  • RolePred: Open-Vocabulary Argument Role Prediction for Event Extraction 论文解读
  • 【数据结构】链表相关题目(简单版)
  • 通信原理 | FFT/STFT 你真的学会了吗?
  • Qt使用API实现鼠标点击操作
  • JavaWeb学习-Tomcat
  • 【蓝牙系列】蓝牙5.4到底更新了什么(2)
  • js中window自带的四舍五入toFixed方法中的坑以及解决办法
  • JeecgBoot 3.5.0 版本发布,开源的企业级低代码平台
  • 行测-判断推理-图形推理-样式规律-空间重构-四面体和八面体
  • HTML5新特性
  • TDengine Schemaless(无模式写入)常见问题的原因及故障排除
  • 【前端八股文】浏览器系列:浏览器渲染、前端路由、前端缓存(HTTP缓存)、缓存存储(HTTP缓存存储、本地存储)
  • SpiderFlow爬虫获取网页节点
  • “微服务架构:优点、缺点及实现方式“
  • c/c++实现crc码计算和校验
  • 漏洞分析丨cve20110104
  • 关于vue-router路径配置的问题(此文主要是记录三级路由的访问路径,以及安装、路由组件、路由重定向)
  • SpringBoot 整合 clickhouse和mysql 手把手教程全网最详细
  • Leetcode-java 数据结构回顾 Day01
  • Java spring cloud 企业工程管理系统源码+项目模块功能清单
  • 用Biome-BGC模型如何模拟水循环过程
  • 【目标检测论文解读复现NO.33】改进YOLOv5的新能源电池集流盘缺陷检测方法
  • 二进制转换之命理学习