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

Offer_36

题目描述

题解分析

  1. 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列)
  2. 利用排序二叉树中序遍历的性质,可以设置一个前置指针和当前指针。
  3. 再遍历完当前结点的所有左子树后,可以得到一个数据值仅次与当前结点的结点,这个结点就是当前结点的前置结点。
  4. 然后修改前置结点的后置结点为当前结点。

java代码:

package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2021/2/3 23:11
*/ /**
* 题目解析:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
* 分析:注意题目中的二叉树是一颗搜索二叉树。
*
*/
public class Offer_36 {
class Node {
public int val;
public Node left;
public Node right; public Node() {} public Node(int _val) {
val = _val;
} public Node(int _val, Node _left, Node _right) {
val = _val;
left = _left;
right = _right;
}
};
Node pre,head;
public Node treeToDoublyList(Node root) {
if(root == null)
return null;
dfs(root);
//修改头尾结点的指针
head.left = pre;
pre.right = head;
return head;
}
void dfs(Node now){
if(now == null)
return;
dfs(now.left);
//待左子树遍历结束后,pre表示仅次于now值的结点
if(pre == null)
head = now;//当前结点为头结点
else pre.right = now;//修改后置指针
//修改前置指针
now.left = pre;
pre = now;
dfs(now.right);
}
}

剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树的更多相关文章

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

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

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

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

  3. 每日一题 - 剑指 Offer 36. 二叉搜索树与双向链表

    题目信息 时间: 2019-06-29 题目链接:Leetcode tag: 二叉搜索树 中序遍历 递归 深度优先搜索 难易程度:中等 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循 ...

  4. 剑指offer-面试题36-二叉搜索树与双向链表-中序遍历

    /* 题目: 将二叉搜索树转化为排序的双向链表,不能创建新的节点, 只能调整节点的指向,返回双向链表的头节点. */ /* 思路: 递归. 二叉搜索树的中序遍历得到的序列是递增序列. 左子树left& ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 【uva 10048】Audiophobia(图论--Floyd算法)

    题意:有一个N点M边的无向带权图,边权表示路径上的噪声值.有Q个询问,输出 x,y 两点间的最大噪声值最小的路径的该值.(N≤100,M≤1000,Q≤10000) 解法:N值小,且问多对点之间的路径 ...

  2. NCD 2019 C. Hasan and his lazy students

    题意:给你一组数,求最长的严格上升子序列及个数(mod 1e9+7) 题解:用动态规划来求LIS,记\(dp[i]\)是数组中第i个位置上的数的LIS最优解,我们遍历一遍原数组,然后找i位置前的LIS ...

  3. Codeforces Round #670 (Div. 2) A. Subset Mex (贪心)

    题意:给你一长度为\(n\)的序列,将其分为两个集合,求两个集合中未出现的最小元素的最大值, 题解:用桶存一下每个元素的个数,两次枚举\([1,100]\),找出两个最小值即可. 代码: int t; ...

  4. C#(winform)button去掉各种边框

    仔细读完,主要在FlatAppearance属性里 1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = "" ;来设置图片 而不应该使用  B ...

  5. kafka消息队列、环境搭建与使用(.net framework)

    一:kafka介绍 kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍 BrokerKafka ...

  6. RPC是个啥

    RPC概念 RPC(Remote Procedure Call)远程过程调用 为什么出现? 分布式应用催生,一个服务需要调用另外一个服务的方法 为什么不用web api的形式调用? 用也可以,但通常是 ...

  7. Netty(六)揭开 BootStrap 的神秘面纱

    6.1 客户端 BootStrap 6.1.1 Channel 简介 在 Netty 中,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否是连接还是断开)以及 ...

  8. Java 对象的哈希值是每次 hashCode() 方法调用重计算么?

    对于没有覆盖hashCode()方法的对象 如果没有覆盖 hashCode() 方法,那么哈希值为底层 JDK C++ 源码实现,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值 ...

  9. 图解 H5 与 WebView 数据通信原理

    图解 H5 与 WebView 数据通信原理 Android / iOS / RN / Flutter H5 接受数据 自定义 schema H5 调用原生 API 拍照,扫码 原生 调用 H5 AP ...

  10. How to unblock GitHub DMCA takedown repo

    How to unblock GitHub DMCA takedown repo 如何解封 GitHub DMCA takedown 的仓库 support@github.com 发件人: GitHu ...