题目描述

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

思路

详见链接

代码

#class Node:
#   def __init__(self, val, left=None, right=None):
#       self.val = val
#       self.left = left
#       self.right = rightclass Solution:def treeToDoublyList(self,root:'None')->'Node':def dfs(cur):if not cur: return dfs(cur.left)if self.pre:self.pre.right, cur.left = cur, self.preelse:self.head = preself.pre = cur   #指针后移dfs(cur.right)if not root: return self.pre = Nonedfs(root)self.head.left, self.pre.right= self.pre, self.headreturn self.head

复杂度

时间复杂度 O(N) : N为二叉树的节点数,中序遍历需要访问所有节点。
空间复杂度 O(N) : 最差情况下,即树退化为链表时,递归深度达到 N,系统使用 O(N) 栈空间。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Java程序员从阿里面试回来,这些面试题你们会吗?
  2. Linux的用户和用户组管理
  3. [YTU]_2018 ( 约瑟夫问题)
  4. opencv入门 - 显示图像学习总结
  5. 一个4体低位交叉的存储器_GD25Q16CSIG|NRAM存储器的原理及优势是什么?
  6. spring security只要熟悉每个filter的作用和顺序
  7. linux查看每个文件夹占空间大小
  8. NumPy数值计算库-1
  9. 7种用户界面UI原则
  10. spark streaming之 windowDuration、slideDuration、batchDuration​
  11. c语言mergesort 参数,求教关于归并排序MergeSort()的问题
  12. Unity3D数字孪生开发笔记——软件基础篇
  13. freemaker 导出自动分页word文档
  14. Python: Command Line Scripts
  15. Android 基于libaums实现读写U盘文件
  16. Java项目:高校运动会管理系统(java+SSM+JSP+JS+jQuery+Mysql)
  17. 如何添加共享计算机用户,如何设置电脑联机共享
  18. 文件操作opendir()/readdir()/closedir()/stat()
  19. Redis 压力测试 服务监控
  20. 图像化界面开发之QT入门

热门文章

  1. 物联网VSWiFi 两强争霸还是携手并进?
  2. 关于视频监控线缆的常识
  3. 万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。 - 今日头条(www.toutiao.com)...
  4. 【李宏毅2020 ML/DL】补充:Structured Learning: Structured SVM
  5. php curl post登录与带cookie模拟登录随笔
  6. [转]busybox登陆后没要求输入密码的解决办法
  7. android tabhost 生命周期,FragmentTabHost + FragmentLayout布局框架,Fragment生命周期
  8. Cocos2d-x Touch事件处理机制(better)
  9. Linux清除用户登录记录和命令历史方法
  10. linux记录iptables日志,linux – 如何配置syslog.conf文件,在单独的文件中记录iptables消息?...