原创博文,转载请注明出处!

# 题目

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

  • 二叉树节点的定义
 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++实现相关推荐

  1. [剑指offer]二叉搜索树的后序遍历数列

    [剑指offer]二叉搜索树的后序遍历数列 剑指offer-二叉搜索树的后序遍历序列 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 fals ...

  2. C#刷剑指Offer | 二叉搜索树的后序遍历序列

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第289篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  3. [剑指offer] 二叉搜索树的后序遍历序列

    二叉搜索树的后序遍历序列 P157 题目:输入一个数组,判断这个数组是不是一个二叉搜索树的后序遍历的结果. solution:我们知道后序遍历序列的最后一个item是根节点,如果确实是二叉搜索树的后序 ...

  4. 剑指offer——二叉搜索树的后序遍历序列

    二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 这里遇到的问题就是,传递的子数组怎 ...

  5. 剑指offer 二叉搜索树的后序遍历

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  6. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)

    思路分析: 首先了解搜索二叉树在中序遍历下的结果是有序的.设一个全局变量num记录次数,每当中序遍历到一个节点时,num++.当num等于k时,返回node即结果. 难在递归上 题目描述 给定一棵二叉 ...

  7. 剑指offer-JZ54 二叉搜索树的第k个节点(附思路)

    描述 给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值. 1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证 ...

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

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

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

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

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

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

最新文章

  1. Redis初学:5(String类型的基本操作)
  2. android checkbox状态不刷新,android开发分享更改checkbox的值,而不触发onCheckChanged
  3. 中修改环境变量_超详干货!Linux环境变量配置全攻略
  4. docker安装kibana7.6.1
  5. window点location(仅介绍window点location对象,不介绍属性,因标题不能含有非法字符,.用点来代替)
  6. java解析excel的js页面,Java导入Excel文件页面实现JS
  7. 路床灰土计算机控制,亳阜高速公路路床灰土施工方案
  8. 数据结构---红黑树的原理
  9. 算法学习之路|程序运行时间
  10. 最近碰到的一些 SSL 问题记录
  11. .h和.cpp文件的区别 .
  12. pycharm看php文件是乱码,Jetbrains-PhpStorm2019.2中文乱码问题
  13. MessageBox 用法合集
  14. vue h5项目集成环信webIM超详细步骤,附代码注释讲解
  15. 设备树使用手册【转】
  16. ssdt函数索引号_【转】SSDT索引号的获取
  17. 浅谈如何加强企业成本管理
  18. Invalid Host/Origin header vue项目
  19. PMP认证考试答题应试技巧
  20. 北京个人所得税计算方法

热门文章

  1. 营销型成人高考自考百度竞价推广落地页源码 单页织梦模板 带手机版
  2. Z-blog拓源纯净主题
  3. 为什么c语言软件调试不出来,急急急……求指导,程序调试不出来
  4. html实现动态折线图
  5. 30万条数据,搜索文本字段的各种方式对比
  6. CodeSmith将模板文件批量生成文件的方法
  7. Magento:在head.phtml中获取产品属性 echo a product attribute in magento head.phtml
  8. 15个带示例的jQuery滚动条插件
  9. UITextView 控件-IOS开发
  10. Linux——CentOS建立一个最高权限的用户