题目: 二叉搜索树与双向链表

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

为了让您更好地理解问题,以下面的二叉搜索树为例:

我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。

特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。


解题:

class Solution {
public:Node* treeToDoublyList(Node* root) {if(!root) return nullptr;Node* head = nullptr, *pre = nullptr;helper(root, head, pre);head->left = pre;pre->right = head;return head;}void helper(Node* root, Node*& head, Node*& pre) {if(!root)  return;helper(root->left, head, pre);if(!head) {head = root;   // 找到headpre = root;    // 对pre进行初始化} else {pre->right = root;root->left = pre;pre = root;}helper(root->right, head, pre);}
};

剑指offer:面试题36. 二叉搜索树与双向链表相关推荐

  1. 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)

    1. 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 特别地,我们希望可以就地完成转换操作.当转化完成以后,树中节点的左指 ...

  2. 剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 思路 详见链接 代码 #class Node: # def __ini ...

  3. 剑指offer面试题[27]-二叉搜索树与双向链表

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

  4. 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)

    1. 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树:5/ \2 6 ...

  5. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

    1. 题目 给定一棵二叉搜索树,请找出其中第k大的节点. 示例 1: 输入: root = [3,1,4,null,2], k = 13/ \1 4\2 输出: 4示例 2: 输入: root = [ ...

  6. 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)

    题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 思路 详见链接 代码 class Solution:def kthLargest(self, root:TreeNode, k:int)-> ...

  7. 剑指offer面试题33. 二叉搜索树的后序遍历序列(二叉树)(递归)

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 思路 详见链接 代码 class Sol ...

  8. 剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.如下图所示 数据范围:输 ...

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

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

  10. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

最新文章

  1. [算法] 举一反三之n重复数组中找唯一m重复异类数
  2. System.IO 的三个抽象类
  3. 高斯噪声和椒盐噪声python
  4. 100个网络基础必备知识 ,值得收藏!
  5. ASP.NET MVC 入门1、简介
  6. 测试python第二周_python第二周作业
  7. 创邻科技张晨:智能物联为图数据库的迅速发展提供了良好应用场景
  8. org.springframework.dao.InvalidDataAccessApiUsageException
  9. SAP License:创建新的库存地点
  10. CCF201512-5 矩阵【矩阵快速幂】(募集解题代码)
  11. 判断一个整数是不是回文
  12. idea ****.class拒绝访问
  13. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现
  14. goback history 传递参数_vue-router go(-1)后退时怎么带参数?
  15. 国内身份证号码的正则验证
  16. python scipy 密度函数 分位数 累计函数计算p值 卡方检验 t检验 F检验 假设检验 AB实验 显著性检验
  17. asp.net mvc 客户端加验证非空验证数据库是否存在验证
  18. IIS三种应用程序池回收方法(保姆级教程)
  19. BZOJ1003 物流运输(dp+spfa)
  20. Qt中父类向子类发送信号

热门文章

  1. python关于字典的操作
  2. Django缓存机制
  3. Docker 仓库管理
  4. Linux下DB2数据库安装教程
  5. Oracle Data Guard 理论知识
  6. c#中分割字符串的几种方法
  7. [Quiz]竞赛题目 Word Trace
  8. usaco The Castle
  9. intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
  10. python二叉树遍历算法_分享python实现的二叉树定义与遍历