题目描述

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

解题思路

  1. 递归调用左子树;
  2. 把原左节点的指针调整为指向链表中指向前一个节点的指针;
  3. 把原右节点的指针调整为指向链表中指向后一个节点的指针;
  4. 递归调用右子树;
  5. 终止条件为节点为NULL。
/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:TreeNode* Convert(TreeNode* pRootOfTree){TreeNode* pList = NULL;ConvertNode(pRootOfTree, &pList);//pList 为尾节点,需返回头节点TreeNode* pRes = pList;while(pRes != NULL && pRes->left != NULL) pRes = pRes->left;return pRes;}void ConvertNode(TreeNode* pNode, TreeNode** pList){if(pNode==NULL) return;// 递归左子树TreeNode* pCur=pNode;if(pCur->left !=NULL) ConvertNode(pCur->left, pList);// 把原左节点的指针调整为指向链表中指向前一个节点的指针;// 把原右节点的指针调整为指向链表中指向后一个节点的指针;pCur->left = *pList;if(*pList != NULL) (*pList)->right = pCur;// 递归右子树*pList = pCur;if(pCur->right != NULL) ConvertNode(pCur->right, pList);}
};

剑指offer 27: 二叉搜索树与双向链表相关推荐

  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. maven多模块eclipse jetty热部署
  2. ubuntu9.10配置编译xawtv-3.95
  3. MySQL-索引优化篇(1)_安装演示库 [前缀索引、联合索引、覆盖索引] explain参数
  4. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
  5. R运行大数据的过程中遇到的问题:不能有负长度矢量
  6. brk(), sbrk() 用法详解【转】
  7. nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)
  8. C. Orac and LCM(数论lcm, gcd)
  9. 单片机常用的几种通信协议
  10. 鼠标悬浮改变背景颜色
  11. 中标麒麟共享win7打印机_win10与win7系统电脑通过局域网共享打印机的方法
  12. 小米平板5系列将有三个版本:搭载全新骁龙860芯片
  13. linux裸分区如何区分,Linux 裸设备基础知识
  14. 三大知名PHP开源多用户商城系统对比
  15. 快速入门spring data jpa 2,多表操作,逻辑删除
  16. win7计算机ip地址怎么查,win7电脑的IP地址怎样查看
  17. Ruby + Passenger 5 分钟 入门
  18. MATLAB函数汇总
  19. 阿里云服务器远程桌面连接
  20. 基于激光雷达实现三边定位算法开发记录(五)——三角函数法拟定圆心

热门文章

  1. Linux常见命令(五)——rmdir
  2. Multithreading in Java
  3. 山石网科-Hillstone-IPsec V_P_N常见故障debug排错心得终结版
  4. 《女性的选择》--[日]今野由梨
  5. Linux操作系统文件系统基础知识详解
  6. MFC按钮CXPButton类,代码阅读起来还是挺不错的
  7. oracle 条件动态视图,oracle最重要的9个动态性能视图
  8. 选择排序算法(基于Java实现)
  9. python count()方法
  10. 如何在文件夹中运行cmd命令行