题目

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

思路

二叉搜索树按照中序遍历即为递增排列,按照分治法的思路,我们只需调整左子树的最大节点与根节点的关系、根节点与右子树的最小节点的关系。具体分为三步:

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之二叉搜索树与双向链表相关推荐

  1. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

  2. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  3. 【Java】 剑指offer(36) 二叉搜索树与双向链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...

  4. 【LeetCode笔记】剑指 Offer 36. 二叉搜索树与双向链表(Java、二叉树、链表、原地算法)

    文章目录 题目描述 思路 && 代码 1. 非原地算法 2. 原地算法 二刷 题目描述 谈到二叉搜索树,那就得考虑考虑中序遍历啦- 这道题对中序遍历的理解提升很有好处! 思路 & ...

  5. [剑指offer] 36. 二叉搜索树与双向链表

    题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 需要返回双向链表最左侧的节点. 思路 1 排序链表:利用二叉搜索树的中序遍 ...

  6. 剑指offer之二叉搜索树和双向链表

    1 问题 比如我们搜索二叉树如下,我们需要变成双向链表 2 分析 我们知道这个变成双向链接的时候是按照树的中序遍历打印的,我们只需要在中序遍历打印的时候操作该节点,我们可以用临时变量保存这个节点,同时 ...

  7. 【算法】剑指 Offer 36. 二叉搜索树与双向链表

    1.概述 地址:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/ /* // De ...

  8. 2021-08-19剑指 Offer 36. 二叉搜索树与双向链表

    我的思路: 前序遍历保证链表的有序性,并且在这个遍历的同时调整指针的指向 class Solution {public:Node* treeToDoublyList(Node* root) {if(r ...

  9. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列

    [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...

  10. 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

    [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...

最新文章

  1. 比较v-bind和v-model
  2. 机器学习知识点(八)感知机模型Java实现
  3. c#-检查USB硬件变化
  4. LeetCode每日打卡 - 汉明距离总和
  5. xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
  6. android mtk平台的fm停止搜索,【MTK平台,手机工程模式知识及方法详解】
  7. 24个 CSS 高级技巧合集
  8. temp不停生成临时文件 win10_Win10系统安装软件提示不能创建临时文件安装中止如何解决...
  9. 马哥python全栈培训怎么样,你只需要在马哥教育待四个月
  10. windows定时截屏小工具
  11. 举例理解哈夫曼树与哈夫曼编码
  12. 数据分析应该怎么做?
  13. 忽略证书,下载网络图片
  14. 三坐标检测基础知识之RationalDMIS 2020 ,PC-DMIS 2019 点轮廓度(T值)算法说明
  15. SpringSecurity框架
  16. 数据与知识管理属于计算机科学研究方向中,基于知识的应用生命周期管理研究-计算机科学与技术专业论文.docx...
  17. HDD深圳站:全生命周期赋能开发者,华为引领应用生态升级
  18. 计算机毕业设计-仿QQ音乐--HTML+CSS
  19. 泰山OFFICE技术讲座:行距,五号、小四时还正常,四号时大幅增加,这是为什么?
  20. 数学分形之谢尔宾方毯

热门文章

  1. Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
  2. 【跃迁之路】【586天】程序员高效学习方法论探索系列(实验阶段343-2018.09.14)...
  3. Redis 之 简单备份还原
  4. 批处理命令调用WINRAR对文件进行压缩
  5. 代码回滚:Reset、Checkout、Revert的选择(转)
  6. 脚本实现为一系列账号生成随机密码
  7. 网上摘的数据缓存资料
  8. 登录,注册,个人信息,退出的隐藏和出现
  9. python 通过逗号分割字符串_「Python 秘籍」使用多个界定符分割字符串
  10. react实现聊天界面_React-Redux 100行代码简易版探究原理