剑指offer:二叉搜索树与双向链表

标签: 剑指offer
0人阅读 评论(0) 收藏 举报
分类:

题目描述

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

思路

二叉搜索树的中序序列就是排序的,中序遍历的时候转换下结点left和right指针,用一个pre指针引用记录前一个结点,最开始是nullptr,
然后把剩余部分最小结点left指向它,如果它非空,把它的right指向该结点,结束时它指向最右,然后因为是双向链表,一直找到最左就可以

code


/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    void inorder(TreeNode* pRoot,TreeNode*&pre){
        if(pRoot==nullptr)
            return ;
        inorder(pRoot->left,pre);
        pRoot->left=pre;
        if(pre)
            pre->right=pRoot;
        pre=pRoot;
        inorder(pRoot->right,pre);
    }
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree==nullptr)
            return nullptr;
        TreeNode* pre=nullptr;
        inorder(pRootOfTree,pre);
        TreeNode* pRoot=pre;
        while(pRoot->left)
            pRoot=pRoot->left;
        return pRoot;
    }
};
查看评论

数据结构(C版)

-
  • 1970年01月01日 08:00

【剑指Offer】二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。算法描述使用递归,分别去将当前节点的左右子树变成双向链表,然后获取左边链表的最...
  • zgljl2012
  • zgljl2012
  • 2015-09-19 02:11:08
  • 2000

剑指offer--面试题27:二叉搜索树与双向链表--Java实现

题目描述:输入一颗二叉搜索树,将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点...
  • u012289407
  • u012289407
  • 2015-06-27 18:23:01
  • 959

剑指offer:二叉搜索树与双向链表(java)

题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点指针的指向。 比如如下图中的二叉搜索树,则输出转换之后的排序双向链表为:     由于要...
  • abc7845129630
  • abc7845129630
  • 2016-10-03 22:12:04
  • 361

剑指offer----二叉搜索树与双向链表----java实现

题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路: 将二叉搜索树转换成一个排序的双链表,利用二叉搜索树的特性,非空...
  • snow_7
  • snow_7
  • 2016-07-17 16:52:24
  • 570

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

思路:这道题目关键在于不能创建新的节点,如不然,我们可以直接将二叉排序树中序遍历保存到一个数组中,而后再建立一个双性链表,将数据保存到双向链表里。 这里不能创建新节点,我们只能改变节点的指向左...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-23 08:26:32
  • 4172

剑指Offer:面试题27——二叉搜索树与双向链表(java实现)

问题描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路: 将树分为三部分:左子树,根结点,右子树。 1.我们...
  • lilianforever
  • lilianforever
  • 2016-07-07 20:11:00
  • 572

剑指offer--二叉搜索树与双向链表

题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 /* public class TreeNode { int va...
  • kangaroo835127729
  • kangaroo835127729
  • 2015-04-19 21:42:32
  • 1261

剑指offer 面试题27—二叉搜索树与双向链表

题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表,要求不能创建任何新节点,只能调整树中结点指针的指向。最后输出排序后双向链表。 基本思想: 二叉树中每个节点都有两个...
  • wtyvhreal
  • wtyvhreal
  • 2015-05-11 22:19:56
  • 977

牛客--剑指offer-二叉搜索树和双向链表

一、问题描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 二、解题思路 将二叉搜索树转换成双向链表,其实就是按照中序遍历的方式来...
  • lemon2631
  • lemon2631
  • 2017-03-12 14:57:08
  • 241
    个人资料
    持之以恒
    等级:
    访问量: 3739
    积分: 583
    排名: 8万+
    最新评论