剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
思路
详见链接
代码
#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. 二叉搜索树与双向链表(中序遍历)(递归)相关推荐
- 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)
1. 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 特别地,我们希望可以就地完成转换操作.当转化完成以后,树中节点的左指 ...
- 剑指offer面试题[27]-二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /* struct TreeNode {int val;struct Tr ...
- 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)
1. 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树:5/ \2 6 ...
- 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)
1. 题目 给定一棵二叉搜索树,请找出其中第k大的节点. 示例 1: 输入: root = [3,1,4,null,2], k = 13/ \1 4\2 输出: 4示例 2: 输入: root = [ ...
- 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)
题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 思路 详见链接 代码 class Solution:def kthLargest(self, root:TreeNode, k:int)-> ...
- 剑指offer面试题33. 二叉搜索树的后序遍历序列(二叉树)(递归)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 思路 详见链接 代码 class Sol ...
- 剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.如下图所示 数据范围:输 ...
- 剑指offer(牛客)---26.二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /** public class TreeNode {int val = ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
最新文章
- Java程序员从阿里面试回来,这些面试题你们会吗?
- Linux的用户和用户组管理
- [YTU]_2018 ( 约瑟夫问题)
- opencv入门 - 显示图像学习总结
- 一个4体低位交叉的存储器_GD25Q16CSIG|NRAM存储器的原理及优势是什么?
- spring security只要熟悉每个filter的作用和顺序
- linux查看每个文件夹占空间大小
- NumPy数值计算库-1
- 7种用户界面UI原则
- spark streaming之 windowDuration、slideDuration、batchDuration​
- c语言mergesort 参数,求教关于归并排序MergeSort()的问题
- Unity3D数字孪生开发笔记——软件基础篇
- freemaker 导出自动分页word文档
- Python: Command Line Scripts
- Android 基于libaums实现读写U盘文件
- Java项目:高校运动会管理系统(java+SSM+JSP+JS+jQuery+Mysql)
- 如何添加共享计算机用户,如何设置电脑联机共享
- 文件操作opendir()/readdir()/closedir()/stat()
- Redis 压力测试 服务监控
- 图像化界面开发之QT入门
热门文章
- 物联网VSWiFi 两强争霸还是携手并进?
- 关于视频监控线缆的常识
- 万能的林萧说:我来告诉你,一个草根程序员如何进入BAT。 - 今日头条(www.toutiao.com)...
- 【李宏毅2020 ML/DL】补充:Structured Learning: Structured SVM
- php curl post登录与带cookie模拟登录随笔
- [转]busybox登陆后没要求输入密码的解决办法
- android tabhost 生命周期,FragmentTabHost + FragmentLayout布局框架,Fragment生命周期
- Cocos2d-x Touch事件处理机制(better)
- Linux清除用户登录记录和命令历史方法
- linux记录iptables日志,linux – 如何配置syslog.conf文件,在单独的文件中记录iptables消息?...