当前位置:网站首页>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),开辟了一个数组来存储结点。
如有错误,多多指教!
边栏推荐
- [免费专栏] Android安全之和平精英(FZ)APK逆向分析
- 中英文说明书丨Abbkine细胞迁移分析试剂盒
- Swift--多条件排序
- An overview of Office 365 Groups and how to create them
- [免费专栏] Android安全之安卓APK浅析
- 技术分享 | 接口自动化测试如何处理 Header cookie
- [免费专栏] Android安全之Android Fragment注入
- 三星旗舰优惠千八,苹果优惠过千,国产旗舰只降五百打发叫花子
- 面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
- uniapp离线推送华为厂商申请流程
猜你喜欢

三星旗舰优惠千八,苹果优惠过千,国产旗舰只降五百打发叫花子

2021 RoboCom 世界机器人开发者大赛-本科组(决赛)

启动 CM agent 报错——ImportError: libssl.so.10: cannot open shared object file: No such file or directory

uniapp离线推送华为厂商申请流程

渗透测试——CFS三层靶机内网渗透实操

小满nestjs(第三章 前置知识装饰器)

优秀的 Verilog/FPGA开源项目介绍(三十一)- OFDM

IDEA工具常用配置

听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!

基于Web的疫情隔离区订餐系统
随机推荐
How to suppress alarm storms?
『百日百题 · 基础篇』备战面试,坚持刷题 第五话——循环语句(2)!
AttributeError: module 'click' has no attribute 'get_os_args'
Laravel DB批量更新的方法
C#/VB.NET: Extract text and pictures from PowerPoint document
poj 1182 食物链(带权并查集)
启动 CM agent 报错——ImportError: libssl.so.10: cannot open shared object file: No such file or directory
【分享】入驻集简云开发者平台,如何使用Session Auth配置授权?
An overview of Office 365 Groups and how to create them
Bi Sheng Compiler Optimization: Lazy Code Motion
《评估、创建和使用知识图谱的限制》2022最新230页博士论文,根特大学
mysql 重复数据 分组 多条最新的记录
[Free Column] Android Security for Peace Elite (FZ) APK Reverse Analysis
Leetcode 739.每日温度 单调栈
[] free column Android run Android, her - as command of safety
2022.08.06_每日一题
钢材行业供应链协同管理系统提升企业上下游密切度,精细化企业内部管理
pytest框架之mark标记功能详细介绍
超多AI开发者等你来玩转,一起燃动昇腾AI创享日南京站!
典型的数据仓库模型实施过程详解