【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处!
# 题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 二叉树节点的定义
struct TreeNode{int val;struct TreeNode *left;struct TreeNode *right;
}
- 二叉搜索树转双向链表的例子
# 思路
- 二叉搜索树的性质
- 二叉搜索树是左子树<根节点<右子树
- 二叉搜索树的中序遍历是递增的有序序列
- 二叉搜索树转双向链表的思路
- 首先:利用BST的中序遍历得到有序序列(递归)
- 其次:通过调整节点指针,将有序链表调整为双向链表
# 代码
class Solution {
public:TreeNode* Convert(TreeNode* pRootOfTree){if(pRootOfTree == nullptr) return nullptr;// 双向链表尾节点TreeNode* list_last = nullptr;// 递归建立双向链表ConvertNode(pRootOfTree,list_last);// 查找双向链表首节点while(list_last->left != nullptr){list_last = list_last->left;}// 返回双向链表的首节点return list_last;}// 对BST中序遍历,得到有序序列;调整序列元素的指针,将有序序列调整为双向链表void ConvertNode(TreeNode* cur,TreeNode *&list_last) // 注意形参{// 边界条件(递归出口)if(cur==nullptr) return ;// 遍历左子树if(cur->left != nullptr) ConvertNode(cur->left,list_last);// 建立双向链接cur->left = list_last; // 单侧链接if(list_last != nullptr) list_last->right = cur; // 单侧链接list_last = cur;//遍历右子树if(cur->right != nullptr) ConvertNode(cur->right,list_last);}
};
转载于:https://www.cnblogs.com/wanglei5205/p/8780086.html
【剑指offer】二叉搜索树转双向链表,C++实现相关推荐
- [剑指offer]二叉搜索树的后序遍历数列
[剑指offer]二叉搜索树的后序遍历数列 剑指offer-二叉搜索树的后序遍历序列 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 fals ...
- C#刷剑指Offer | 二叉搜索树的后序遍历序列
[C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第289篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...
- [剑指offer] 二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列 P157 题目:输入一个数组,判断这个数组是不是一个二叉搜索树的后序遍历的结果. solution:我们知道后序遍历序列的最后一个item是根节点,如果确实是二叉搜索树的后序 ...
- 剑指offer——二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 这里遇到的问题就是,传递的子数组怎 ...
- 剑指offer 二叉搜索树的后序遍历
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
思路分析: 首先了解搜索二叉树在中序遍历下的结果是有序的.设一个全局变量num记录次数,每当中序遍历到一个节点时,num++.当num等于k时,返回node即结果. 难在递归上 题目描述 给定一棵二叉 ...
- 剑指offer-JZ54 二叉搜索树的第k个节点(附思路)
描述 给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值. 1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证 ...
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
- 【重点】剑指offer——面试题27:二叉搜索树与双向链表
剑指offer--面试题27:二叉搜索树与双向链表 Solution1: 这是书上的代码,要理解好最近几道题,对指针的操作比较多... class Solution { public:TreeNode ...
- 剑指offer:面试题36. 二叉搜索树与双向链表
题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...
最新文章
- Redis初学:5(String类型的基本操作)
- android checkbox状态不刷新,android开发分享更改checkbox的值,而不触发onCheckChanged
- 中修改环境变量_超详干货!Linux环境变量配置全攻略
- docker安装kibana7.6.1
- window点location(仅介绍window点location对象,不介绍属性,因标题不能含有非法字符,.用点来代替)
- java解析excel的js页面,Java导入Excel文件页面实现JS
- 路床灰土计算机控制,亳阜高速公路路床灰土施工方案
- 数据结构---红黑树的原理
- 算法学习之路|程序运行时间
- 最近碰到的一些 SSL 问题记录
- .h和.cpp文件的区别 .
- pycharm看php文件是乱码,Jetbrains-PhpStorm2019.2中文乱码问题
- MessageBox 用法合集
- vue h5项目集成环信webIM超详细步骤,附代码注释讲解
- 设备树使用手册【转】
- ssdt函数索引号_【转】SSDT索引号的获取
- 浅谈如何加强企业成本管理
- Invalid Host/Origin header vue项目
- PMP认证考试答题应试技巧
- 北京个人所得税计算方法