剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)
1. 题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。
2. 解题
- 中序遍历
- 循环解法
循环写法总结如下:
class Solution {public:Node* treeToDoublyList(Node* root) {if(!root)return NULL;bool foundHead = false;Node* head, *prev = NULL;stack<Node*> s;while(root || !s.empty()){while(root){s.push(root);root = root->left;}if(!foundHead){head = s.top();foundHead = true;}root = s.top()->right;if(prev)prev->right = s.top(); s.top()->left = prev;prev = s.top();s.pop();}head->left = prev;//prev存的是最后一个prev->right = head;return head;}
};
-递归解法
class Solution {Node *head = NULL, *prev = NULL, *tail = NULL;
public:Node* treeToDoublyList(Node* root) {if(!root)return NULL;inorder(root);head->left = tail;tail->right = head;return head;}void inorder(Node* root){if(!root)return;inorder(root->left);if(!prev)head = root;elseprev->right = root;root->left = prev;prev = root;tail = root;inorder(root->right);}
};
剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)相关推荐
- 剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 思路 详见链接 代码 #class Node: # def __ini ...
- 剑指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,否则输出 ...
最新文章
- 计算机应用基础形成性考核册答案,2019年最新(电大秋)计算机应用基础形成性考核册题目及答案.doc...
- 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络
- 计算机操作系统实验一,计算机操作系统实验一.doc
- 「分布式系统理论」系列专题
- github 如何设置项目的语言显示
- c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...
- 各种封装——封装getClass
- Jenkins打卡Day19-Jenkins重启关闭服务
- C# 异步定时器,可以重载; System.Timers.Timer
- 【INDIRECT】函数教你制作多级下拉菜单
- java 算法,Java的十大算法你掌握好了吗?
- H3C模拟器配置VLAN
- 已解决-MacBook pro/MacBook air上安装Windows10双系统教程
- java excel 合并单元格
- HBase 怎样负载均衡?
- JADE盲源分离算法附MATLAB代码
- 艺赛旗(RPA)Python 读写 ini 配置文件
- leetcode 5233 Maximum Profit in Job Scheduling
- fbd 文件的研究笔记
- oracle左补全函数,Oracle 左侧补齐函数lpad 函数 (不积跬步,无以至千里)
热门文章
- smart gesture安装失败_WinCC flexible SMART V3 SP2安装步骤以及常见错误解决方法
- 深入理解C++中的explicit关键字
- oracle中pga指什么,oracle学习SGA跟PGA理解
- plsql中文乱码 显示问号
- 程序员经常说的「设计模式」到底是什么?
- WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机
- 用JS来create结点,纯JS代码生成html页面(作业练习)
- c#将list集合转换为datatable的简单办法
- Android心得8--Internet
- vector中的reserve() 与 resize()