题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

返回值应该是一个指向值最小节点的指针。

思路:很明显,当中序遍历一个二叉搜索树的时候,结果就是由小到大遍历的。那么我们需要找一种方法能够持续连接中序遍历的时候的某个节点和它的下一个节点,从而形成双向链表。

代码如下:

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:TreeNode* start = NULL;//pLastLeft表示一个树左边排好序的最右边的节点TreeNode* pLastLeft = NULL;TreeNode* Convert(TreeNode* pRootOfTree){//这道题的核心是中序遍历。//对于一个节点,它只要能找到它的中序遍历的下一个节点,就可以建立一个双向链表了if(!pRootOfTree) return NULL;helper(pRootOfTree);return start;}void helper(TreeNode* pRootOfTree){//中序遍历if(!pRootOfTree) return;helper(pRootOfTree->left);if(!start){//首先如果找到了最左边的这个节点,那么start指向它,最终返回startstart = pRootOfTree;pLastLeft = pRootOfTree;}else{//根节点和排好序的最右边节点形成双向链表pRootOfTree->left = pLastLeft;pLastLeft -> right = pRootOfTree;//排好序的最右边节点右移一位pLastLeft = pRootOfTree;}helper(pRootOfTree->right);}
};

牛客网 二叉搜索树与双向链表相关推荐

  1. 剑指offer(牛客)---26.二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /** public class TreeNode {int val = ...

  2. java 双向链表_Day26:二叉搜索树与双向链表

    剑指Offer_编程题--二叉搜索树与双向链表 题目描述: 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的节点.只能调整树中节点指针的指向. 具体要求: 时间限制: ...

  3. 剑指offer:面试题36. 二叉搜索树与双向链表

    题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: ...

  4. [二叉树]二叉搜索树转换为双向链表(剑指Offer26)

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  5. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  6. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

  7. 【IT笔试面试题整理】二叉搜索树转换为双向链表

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  8. 【重点】剑指offer——面试题27:二叉搜索树与双向链表

    剑指offer--面试题27:二叉搜索树与双向链表 Solution1: 这是书上的代码,要理解好最近几道题,对指针的操作比较多... class Solution { public:TreeNode ...

  9. java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表

    1.请说明一下EJB的几种类型分别是什么? EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean).实体Bean(Entity ...

最新文章

  1. 常用的python数值处理函数,python常用数值函数总结
  2. asp中sub与function的区别
  3. 第六次的服务端课程:JDBC,数据源配置
  4. [NOIP2015] 子串
  5. jacoco入门_Android jacoco 代码覆盖率测试入门
  6. 私有GIT服务器的免密提交
  7. Windows域策略 设置客户端服务启动状态 【全域策略生效】
  8. 通信原理眼图画法_光纤通信链路入侵与检测技术研究综述
  9. hibernate 调用存储过程
  10. Perl脚本语言学习1:
  11. 窗方法原理之矩形窗及汉明窗
  12. iphone苹果手机ios15系统最新降级方法教程
  13. 华为浏览器工具箱 html修改,华为电子文档浏览器(HedEx Lite)
  14. ADS1115使用及其驱动电路
  15. 根据不同时区来计算当前时间
  16. 雨落无声-开博啦........
  17. 微信云开发-后端-快速上手
  18. P3396 哈希冲突 (根号算法)
  19. 小森生活服务器维护到几点,小森生活几点开服上线 2021小森生活开服表大全[多图]...
  20. ArcGIS for Js Graphic、GraphicLayer、Geometry、(Point,Line,Polygon)、Rings(Coordinates)之间的关系

热门文章

  1. python有趣小程序-你用python写过那些好玩的微信小程序?
  2. python从入门到放弃-python从入门到放弃--day1
  3. 自学python买什么书比较好-python入门学习哪个书比较好(python视频教程知乎)
  4. 1.java数组教程及示例知乎
  5. 【贪心】蓝桥2019:最大降雨量
  6. 蓝桥杯日期填空问题:高斯日记/星系炸弹
  7. 【数据结构和算法笔记】递归详解(附题)
  8. CImage 对话框初始化时候显示透明 PNG
  9. html搜索框代码_解放双手 | 10行Python代码实现一款网页自动化工具
  10. java double 存储_可以存储在double中的最大整数