剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示
数据范围:输入二叉树的节点数0≤n≤1000,二叉树中每个节点的值0≤val≤1000
要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)
注意:
1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继
2.返回链表中的第一个节点的指针
3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构
4.你不用输出双向链表,程序会根据你的返回值自动打印输出
示例:
输入:
{10,6,14,4,8,12,16}
返回值:
From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;
说明:
输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。
解题思路:
本题考察数据结构树的使用。运用中序遍历将二叉树的节点存放在vector中,再依次建立双向链表即可。
测试代码:
/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree==nullptr)return pRootOfTree;stack<TreeNode*> s;vector<TreeNode*> v;auto a=pRootOfTree;// 中序遍历while(!(s.empty()&&a==nullptr)){while(a!=nullptr){s.push(a);a=a->left;}if(!s.empty()){a=s.top();s.pop();v.push_back(a);a=a->right;}}// 双向链表建立v.front()->left=nullptr;v.back()->right=nullptr;int size=v.size();for(int i=0;i<size-1;++i){v[i]->right=v[i+1];v[i+1]->left=v[i];}return v.front();}
};
剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)相关推荐
- 剑指offer 27: 二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 递归调用左子树: 把原左节点的指针调整为指向链表中指向前一个节点 ...
- 二叉搜索时与双向链表python_【剑指offer】26 二叉搜索树与双向链表
- 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. - 解题思路 递归 - Java实现 /**public class ...
- 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
[LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...
- 剑指 Offer II 055. 二叉搜索树迭代器
链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...
- 《剑指Offer》51. 二叉搜索树的第k个结点
题目:51. 二叉搜索树的第k个结点 知识点:二叉搜索树 题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为 ...
- 剑指offer 24:二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 二叉搜索数的定义:左节点比根节点小,右节 ...
- 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 【剑指offer】_09二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 比如下面的这棵二叉搜索树 它的后序遍历为 ...
- 【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)
文章目录 思路 & 代码 代码 & 思路 二刷 思路 & 代码 应该在二叉树的最近公共祖先之前写= = 需要用到二叉搜索树的特性- 代码 & 思路 分成四种情况即可,具 ...
最新文章
- 大连二本的学计算机专业的大学,高考成绩差:这9所“二本大学”的计算机专业不错!值得报考!...
- Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结
- 工程实战-ES6环境配置
- mysql 备库 hang住_mysql主键的缺少导致备库hang住
- 1005. 继续(3n+1)猜想 (25)
- [Jarvis OJ - PWN]——[XMAN]level1
- LeetCode 1615. 最大网络秩(出入度)
- ida 字符串查找_IDA 搜索中文字符串
- C++/OpenGL:图像指针操作
- h5页面在ios机上禁止长按复制
- 利用oc门或od门实现线与_OC和OD门、线与和线或
- winrar去弹窗广告激活办法!!
- Mybatis中取 Oracle自增序列 重复值
- 2014网络红人彭伟个人资料及照片
- 「免费 | 重磅」9月19日首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)「中国科学院自动化研究所」...
- 三条中线分的六个三角形_为什么三角形的三条中线把三角形分为面积相等的六块...
- SCI文章下载、选刊、分区查询—起飞站
- 10.26 node.js day01
- 全国青少年软件编程(Scratch)一级2019考试测试卷最后一道编程题!
- linux 蓝牙发送文件,如何在Ubuntu上使用蓝牙进行文件传输