当前位置:网站首页>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),开辟了一个数组来存储结点。
如有错误,多多指教!
边栏推荐
- AWS CodePipeLine 跨账号部署ECS
- 【kali-密码攻击】(5.1.1)密码在线破解:Hydra(图形界面)
- hdu 2094 产生冠军(STL map || 拓扑 || STL set)
- 面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
- 一图详解沃土云创计划高校教师参与全流程
- leetcode 503.下一个更大元素II 单调栈
- Openharmony Lightweight System Experiment--GPIO Lighting
- 基于CC2530 E18-MS1-PCB Zigbee DIY作品
- 看完这波 Android 面试题;助你斩获心中 offer
- 奥特曼卡牌隐藏的百亿市场
猜你喜欢
2022深圳(软考高级)信息系统项目管理师认证报名
最新BEV感知基线 | 你确定需要激光雷达?(卡内基梅隆大学)
漏洞复现-redis未授权getshell
为什么数字钱包需要引入小程序生态
[Free Column] Android Security for Peace Elite (FZ) APK Reverse Analysis
渗透测试-对新型内存马webshell的研究
IS31FL3737B 通用12×12 LED驱动器 I2C 42mA 40QFN
新起之秀 DPU,正在掀起数据中心变革!
鲜花线上销售管理系统的设计与实现
Toronto Research Chemicals单羟基舒更葡糖钠说明书
随机推荐
视频是主动学习吗?
[免费专栏] Android安全之和平精英(FZ)APK逆向分析
[免费专栏] Android安全之Android奇淫run-as命令
数据分散情况的统计图-盒须图
laravel报错:TokenMismatchException in VerifyCsrfToken.php line 68:
钢材行业供应链协同管理系统提升企业上下游密切度,精细化企业内部管理
韩国严厉监管元宇宙相关企业
一图详解沃土云创计划高校教师参与全流程
基于SSM实现手机销售商城系统
shell脚本编写 hash方法,shell中字符到ascii码或数字的转换
Toronto Research Chemicals加米霉素-d4说明书
Openharmony Lightweight System Experiment--GPIO Lighting
重磅!上海985教授当选!全球仅4人!
【kali-权限提升】(4.2.7)社会工程学工具包:权限维持创建后门、清除痕迹
pytest框架之mark标记功能详细介绍
数学建模——模拟退火
[免费专栏] Android安全之ZIP文件目录遍历漏洞
Swift -- 数组高阶函数
鲜花线上销售管理系统的设计与实现
Start cleaning up the long-term divers in the electronic chart development group again