剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树
剑指 Offer 36. 二叉搜索树与双向链表
Offer_36
题目描述

题解分析
- 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列)
- 利用排序二叉树中序遍历的性质,可以设置一个前置指针和当前指针。
- 再遍历完当前结点的所有左子树后,可以得到一个数据值仅次与当前结点的结点,这个结点就是当前结点的前置结点。
- 然后修改前置结点的后置结点为当前结点。
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. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树的更多相关文章
- 剑指 Offer 36. 二叉搜索树与双向链表
		剑指 Offer 36. 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的 ... 
- 【Java】 剑指offer(36) 二叉搜索树与双向链表
		本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ... 
- 每日一题 - 剑指 Offer 36. 二叉搜索树与双向链表
		题目信息 时间: 2019-06-29 题目链接:Leetcode tag: 二叉搜索树 中序遍历 递归 深度优先搜索 难易程度:中等 题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循 ... 
- 剑指offer-面试题36-二叉搜索树与双向链表-中序遍历
		/* 题目: 将二叉搜索树转化为排序的双向链表,不能创建新的节点, 只能调整节点的指向,返回双向链表的头节点. */ /* 思路: 递归. 二叉搜索树的中序遍历得到的序列是递增序列. 左子树left& ... 
- 【剑指Offer】二叉搜索树与双向链表 解题报告(Python)
		[剑指Offer]二叉搜索树与双向链表 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ... 
- 【剑指offer】二叉搜索树转双向链表,C++实现
		原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ... 
- Go语言实现:【剑指offer】二叉搜索树与双向链表
		该题目来源于牛客网<剑指offer>专题. 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. Go语言实现: type T ... 
- 剑指offer 27二叉搜索树与双向链表
		class Solution { public: void ConvertNode(TreeNode* pRootOfTree,TreeNode** pre) { if(pRootOfTree) { ... 
- 【剑指offer】二叉搜索树转双向链表
		转载请注明出处:http://blog.csdn.net/ns_code/article/details/26623795 题目描写叙述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. ... 
随机推荐
- 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)
			必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵A(u,v),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩阵定义为 ... 
- Codeforces Testing Round #16 C.Skier
			题意: 一个人在雪地上滑雪,每次可以向上下左右四个方向移动一个单位,如果这条路径没有被访问过,则需要5秒的时间,如果被访问过,则需要1秒(注意:判断的是两点之间的距离,不是单纯的点).给你他的行动轨迹 ... 
- python 实现AES加密和解密
			参考 https://blog.csdn.net/zhchs2012/article/details/79032656 AES加密算法是一种对称加密算法, 他有一个密匙, 即用来加密, 也用来解密 i ... 
- win7 & centos7 双系统安装方法
			1.准备 1)Centos7镜像 官方:https://www.centos.org/ 阿里镜像:http://mirrors.aliyun.com/centos/ 2)安装windows7系统的电脑 ... 
- L3-002. 堆栈【主席树 or 线段树 or 分块】
			L3-002. 堆栈 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家都知道"堆栈"是一种"先 ... 
- codepen 上25个最受欢迎的HTML/CSS代码
			Codepen是一个非常了不起的网站,优设哥在设计师网址导航上也大力推荐过,得到了很多同学的喜爱,也是全球web前端开发人员的圣地! 我搜索了一些时下最好最流行的codepen(仅限于HTML和CSS ... 
- github & coding 2018
			github & coding 2018 github & coding all in one https://github.com/topics/javascript react r ... 
- taro coding specification
			taro coding specification https://nervjs.github.io/taro/docs/spec-for-taro.html 跨平台开发 https://nervjs ... 
- free Google translator for the personal website
			free Google translator for the personal website https://html5.xgqfrms.xyz/ 
- nasm astrset_s函数 x86
			xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ... 
