题目描述

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

  在搜索二义树中,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值。

  因此,将二叉搜索树转换成排序双向链表时,

    原先指向左子节点的指针调整为链表中指向前一个节点的指针,

    原先指向右子节点的指针调整为链表中指向后一个节点的指针。

  

 class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode* head = nullptr;
ConvertNode(pRootOfTree, head);//返回的head为指向双链表的尾节点
while (head != nullptr && head->left != nullptr)//向前找到头节点
head = head->left;
return head;
}
void ConvertNode(TreeNode *cur, TreeNode *&pre)
{
if (cur == nullptr)return;
ConvertNode(cur->left, pre);//找到最左节点 cur->left = pre;//左节点指向比他更小的节点
if (pre != nullptr)pre->right = cur;//更小的右节点指向后一个节点 pre = cur;//然后更新双链表
ConvertNode(cur->right, pre);
}
};

剑指offer——38二叉搜索树与双向链表的更多相关文章

  1. 剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树

    剑指 Offer 36. 二叉搜索树与双向链表 Offer_36 题目描述 题解分析 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列) 利用排序二叉树中序遍历的性 ...

  2. 剑指 Offer 36. 二叉搜索树与双向链表

    剑指 Offer 36. 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的 ...

  3. 【剑指Offer】二叉搜索树与双向链表 解题报告(Python)

    [剑指Offer]二叉搜索树与双向链表 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...

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

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

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

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

  6. Go语言实现:【剑指offer】二叉搜索树与双向链表

    该题目来源于牛客网<剑指offer>专题. 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. Go语言实现: type T ...

  7. 剑指offer 27二叉搜索树与双向链表

    class Solution { public: void ConvertNode(TreeNode* pRootOfTree,TreeNode** pre) { if(pRootOfTree) { ...

  8. 【剑指offer】二叉搜索树转双向链表

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26623795 题目描写叙述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. ...

  9. 《剑指offer》二叉搜索树和双向链表

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

随机推荐

  1. 64位系统sql链接oracle

    在SQL Server 2008中连接Oracle,完成查询.插入操作 建立指向Oracle的连接 在32位的系统中sql链接oracle,在链接服务器里点击服务器对象,右键链接服务器,选择micro ...

  2. Java泛型方法和构造函数

    可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定.包含泛型方法声明的类型不必是通用类型.可以在非静态方法声明中使用为泛型类型指定的类型参数. 示例 以下代码显示如何为方法m1()定 ...

  3. JasperReports教程

    JasperReports教程 Jasper报表是一个开源的Java报表引擎,是基于Java的,它没有自己的表达式语法. 由于JasperReports是一个Java类库,而不是针对最终用户,而是有针 ...

  4. Oracle查看有锁进程,删除锁

    查看锁表进程SQL语句1: select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao ...

  5. 使用Emacs来编程

    使用Emacs来编程 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} code ...

  6. 在frameset,iframe內調用Javascript的方法

    在frame內操作主窗口 的兩個方法 getElementsByTagName  var ff=window.parent.window.document.getElementsByTagName(& ...

  7. 【java】自定义排序

    使用Comparable接口 这里定义了一个类Node,有两个属性,id,age. 排序方法是,先根据id升序排,id一样,age降序排. 里面有一个compareTo方法.返回值有三个 1. < ...

  8. 一文读懂MQTT协议

    1  概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级 ...

  9. 在linux上安装jdk

    一.环境 1.  VMware虚拟机 2.  Linux系统(centos7) 安装步骤: 1.  先安装VMtools 2.  查看是否有openjdk,若有先将系统内的openJDK删除(采用 r ...

  10. Docker部署web环境之总结篇

    3. 问题总结 问题总结1: 数据库容器时区问题以及环境变量的安全控制 docker-compose.yml文件中的环境变量,可以配置的变量方法有两种: 方法一:docker-compose.yml文 ...