剑指offer之二叉搜索树与双向链表
题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
二叉搜索树按照中序遍历即为递增排列,按照分治法的思路,我们只需调整左子树的最大节点与根节点的关系、根节点与右子树的最小节点的关系。具体分为三步:
1.最大节点在左子树中:递归调用左子树;
2.最大节点为根节点;
3.最大节点在右子树中:递归调用右子树;
其中,第一步需要注意当前最大节点为空的情况(lastNode==null)。第二步连接最大节点与根节点(两种情况)。
代码
/**
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
*/
public class Solution {public TreeNode Convert(TreeNode pRootOfTree) {if(pRootOfTree==null){return null;} helper(pRootOfTree,null); TreeNode start=pRootOfTree;while(start.left!=null){start=start.left;} return start;}private TreeNode helper(TreeNode pRootOfTree,TreeNode lastNode){//处理左子树,获得最大结点if(pRootOfTree.left!=null){lastNode=helper(pRootOfTree.left,lastNode);//1}//链接最大结点和根结点pRootOfTree.left=lastNode;if(lastNode!=null){lastNode.right=pRootOfTree;}//获得最大结点lastNode=pRootOfTree;//2//处理右子树,获得最大结点if(pRootOfTree.right!=null){lastNode=helper(pRootOfTree.right,lastNode);//3}return lastNode;}
}
测试用例
功能测试(普通二叉树;左/右斜树;一个节点)。
特殊输入测试 (根节点为null)。
剑指offer之二叉搜索树与双向链表相关推荐
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
- 【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...
- 【Java】 剑指offer(36) 二叉搜索树与双向链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...
- 【LeetCode笔记】剑指 Offer 36. 二叉搜索树与双向链表(Java、二叉树、链表、原地算法)
文章目录 题目描述 思路 && 代码 1. 非原地算法 2. 原地算法 二刷 题目描述 谈到二叉搜索树,那就得考虑考虑中序遍历啦- 这道题对中序遍历的理解提升很有好处! 思路 & ...
- [剑指offer] 36. 二叉搜索树与双向链表
题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 需要返回双向链表最左侧的节点. 思路 1 排序链表:利用二叉搜索树的中序遍 ...
- 剑指offer之二叉搜索树和双向链表
1 问题 比如我们搜索二叉树如下,我们需要变成双向链表 2 分析 我们知道这个变成双向链接的时候是按照树的中序遍历打印的,我们只需要在中序遍历打印的时候操作该节点,我们可以用临时变量保存这个节点,同时 ...
- 【算法】剑指 Offer 36. 二叉搜索树与双向链表
1.概述 地址:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/ /* // De ...
- 2021-08-19剑指 Offer 36. 二叉搜索树与双向链表
我的思路: 前序遍历保证链表的有序性,并且在这个遍历的同时调整指针的指向 class Solution {public:Node* treeToDoublyList(Node* root) {if(r ...
- 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
[LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...
- 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...
最新文章
- 比较v-bind和v-model
- 机器学习知识点(八)感知机模型Java实现
- c#-检查USB硬件变化
- LeetCode每日打卡 - 汉明距离总和
- xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
- android mtk平台的fm停止搜索,【MTK平台,手机工程模式知识及方法详解】
- 24个 CSS 高级技巧合集
- temp不停生成临时文件 win10_Win10系统安装软件提示不能创建临时文件安装中止如何解决...
- 马哥python全栈培训怎么样,你只需要在马哥教育待四个月
- windows定时截屏小工具
- 举例理解哈夫曼树与哈夫曼编码
- 数据分析应该怎么做?
- 忽略证书,下载网络图片
- 三坐标检测基础知识之RationalDMIS 2020 ,PC-DMIS 2019 点轮廓度(T值)算法说明
- SpringSecurity框架
- 数据与知识管理属于计算机科学研究方向中,基于知识的应用生命周期管理研究-计算机科学与技术专业论文.docx...
- HDD深圳站:全生命周期赋能开发者,华为引领应用生态升级
- 计算机毕业设计-仿QQ音乐--HTML+CSS
- 泰山OFFICE技术讲座:行距,五号、小四时还正常,四号时大幅增加,这是为什么?
- 数学分形之谢尔宾方毯
热门文章
- Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
- 【跃迁之路】【586天】程序员高效学习方法论探索系列(实验阶段343-2018.09.14)...
- Redis 之 简单备份还原
- 批处理命令调用WINRAR对文件进行压缩
- 代码回滚:Reset、Checkout、Revert的选择(转)
- 脚本实现为一系列账号生成随机密码
- 网上摘的数据缓存资料
- 登录,注册,个人信息,退出的隐藏和出现
- python 通过逗号分割字符串_「Python 秘籍」使用多个界定符分割字符串
- react实现聊天界面_React-Redux 100行代码简易版探究原理