当前位置:网站首页>leetcode二叉搜索树与双向链表
leetcode二叉搜索树与双向链表
2022-08-09 18:52:00 【老鱼37】
思路:
1.创建一个新数组
2.中序遍历二叉树 将值放入数组里面
3.遍历数组将值放入双向链表中 建立双向关系
//链表题目已经给出,这里是为了给予展示
//创建一个链表
// struct TreeNode
// {
// int val;
// struct TreeNode*left;
// struct TreeNode*right;
// TreeNode(int x)
// {
// val=x;
// left=NULL;
// right=NULL;
// }
// };
class Solution {
public:
//创建一个数组
vector<TreeNode*>st;
void Inorder(TreeNode*root)
{
if(!root) return;
Inorder(root->left);
st.push_back(root);
Inorder(root->right);
}
TreeNode* Convert(TreeNode* pRootOfTree) {
//中序遍历二叉树然后放入数组里面,然后遍历数组放入双向链表中
if(!pRootOfTree) return pRootOfTree;
Inorder(pRootOfTree);//中序遍历
//根据数组中的顺序将结点连接,注意i的范围
for(int i=0;i<st.size()-1;i++)
{
st[i]->right=st[i+1];//连接关系
st[i+1]->left=st[i];//连接关系
}
return st[0];
}
};
时间复杂度:O(N),等于中序遍历的时间复杂度。
空间复杂度:O(N),开辟了一个数组来存储结点。
解法二:
在树上动手脚,创建一个头指针,一个头指针的前一个指针
遍历左树,找到最左边的是树中最小的数,然后就是链表的头
遍历右树,找到最右边的是树中最大的数,然后就是链表的尾
然后依靠pre指针串联起来,最后输出链表头
class Solution {
public:
//返回的第一个指针,初值为最小值,为NUNLL
TreeNode*head=NULL;
//中序遍历当前值的上一位,初值为最小值,为NULL
TreeNode*pre=NULL;
TreeNode* Convert(TreeNode* pRootOfTree) {
if(pRootOfTree==NULL)
{
//中序递归
return NULL;
}
Convert(pRootOfTree->left);
//找到左树最左最小值
if(pre==NULL)
{
head=pRootOfTree;
pre=pRootOfTree;
}
else
{
pre->right=pRootOfTree;
pRootOfTree->left=pre;
pre=pRootOfTree;//pre等于新的root值
}
//遍历右树
Convert(pRootOfTree->right);
return head;
}
};
时间复杂度:O(N),等于中序遍历的时间复杂度。
空间复杂度:O(N),开辟了一个数组来存储结点。
如有错误,多多指教!
边栏推荐
- 全自动化机器学习建模!效果吊打初级炼丹师!
- Laravel DB批量更新的方法
- win10配置CenterNet环境
- 数据分散情况的统计图-盒须图
- laravel 中配置文件.env解读
- [免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
- Haven't tried line art videos this year??
- ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
- 为什么数字钱包需要引入小程序生态
- Samsung's flagship discount is 1,800, Apple's discount is over 1,000, and the domestic flagship is only reduced by 500 to send beggars
猜你喜欢
WPF 实现带蒙版的 MessageBox 消息提示框
【Unity3D】2D动画
IS31FL3737B general 12 x 12 LED drive 40 QFN I2C 42 ma
[免费专栏] Android安全之数据存储与数据安全【大集合】
【kali-密码攻击】(5.1.1)密码在线破解:Hydra(图形界面)
[免费专栏] Android安全之静态方式逆向APK应用浅析【手动注入smali+】+【IDA Pro静态分析so文件】+【IDA Pro基础使用讲解】
小满nestjs(第三章 前置知识装饰器)
mysql duplicate data group multiple latest records
Codesys结构变量编程应用(STRUCT类型)
Open Source Summer | List Details Display Based on Ruoyi Architecture
随机推荐
shell之变量详解,让你秒懂!
环境:Flink版本:1.15.1jar包:flink-sql-connector-oracle
Codesys结构变量编程应用(STRUCT类型)
C#/VB.NET:从PowerPoint文档中提取文本和图片
阿里云架构师耗时几个月编写这份MySQL高可用和性能优化技术宝典
如何抑制告警风暴?
2022深圳(软考中级)系统集成项目管理工程师报名
漏洞复现-redis未授权getshell
[Free Column] Android Security for Peace Elite (FZ) APK Reverse Analysis
vim编辑器使用
MYSQL记录、自用
[Free column] APK dynamic reverse application of Android security [Three Smali injection methods]
Swift--多条件排序
请问一下flink cdc mysql source 报这种错怎么处理呢?我都设置了useSSL=f
[免费专栏] Android安全之安卓APK浅析
2022.08.05_每日一题
双屏协作更高效,华硕灵耀X 双屏Pro 2022创作体验再升级
嵌入式开发:使用FILL提高代码完整性
基于CC2530 E18-MS1-PCB Zigbee DIY作品
Openharmony Lightweight System Experiment--GPIO Lighting