首页 > 其他分享 >剑指 Offer 36. 二叉搜索树与双向链表(中等)

剑指 Offer 36. 二叉搜索树与双向链表(中等)

时间:2023-08-14 21:22:05浏览次数:47  
标签:pre Node head cur Offer 36 链表 节点

题目:

class Solution {
public:
    Node* head=nullptr;
    Node* pre=nullptr;
    void traversal(Node* cur){   //二叉搜索树中序遍历的顺序就是构建双向链表的顺序
        if(!cur) return;
        traversal(cur->left);
        if(pre){      //若前置节点存在,则与当前节点建立双向链表关系
            pre->right=cur;
            cur->left=pre;
        }
        else{      //若不存在前置节点,说明该节点为头结点
            head = cur;
        }
        pre = cur;      //将当前节点设置为前置节点
        traversal(cur->right);
    }
    Node* treeToDoublyList(Node* root) {
        if(!root) return root;
        traversal(root);
        head->left = pre;      //最后要将头尾节点建立循环链表关系。pre递归到最后指向最后一个节点。
        pre->right = head;
        return head;      //返回的是头结点
    }
};

作者:林小鹿
链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/solutions/896127/tu-wen-bing-mao-zui-tong-su-yi-dong-de-t-0adg/
来源:力扣(LeetCode)

标签:pre,Node,head,cur,Offer,36,链表,节点
From: https://www.cnblogs.com/fly-smart/p/17629798.html

相关文章

  • 单向链表
    1.概念链表就是将结点用链串起来的线性表,链就是结点中的指针域。2.接口实现对比操作顺序表的结构体定义用来操作顺序表的结构体定义structSeqList{  intdata[10]; //顺序表  intlast;}用来操作有头单向链表的结构体定义structLinkListNode{  intdata......
  • list 容器(链表)
    1.list基本概念链表(list)是一种物理存储单元上的非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的;将数据进行链式存储。  是一个双向循环链表;链表由一系列结点组成;结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点的指针域;优......
  • 一文学会链表双指针技巧
    1.合并两个有序链表21.合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两......
  • day04 - 链表part02
     24. 两两交换链表中的节点/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode......
  • AMEYA360:DNB1101大唐恩智浦工规级电池管理芯片
    大唐恩智浦作为全球领先的半导体供应商,一直致力于为全球客户提供高质量的解决方案。在电池管理芯片领域,大唐恩智浦推出的DNB1101可谓是一款工规级的电池管理芯片,其卓越的性能和可靠性成为市场上备受全球领先的半导体供应商,一直致力于为全球客户提供高质量的解决方案。在电池管......
  • redis数据结构链表
    redis数据结构链表数据结构链表节点typedefstructlistNode{//前置节点structlistNode*prev;//后置节点structlistNode*next;//节点的值void*value;}listNode;多个listNode可以通过prev和next指针组成双端链表链表typedefstructlist{//表头节点......
  • day03 - 链表part01
    203. 移除链表元素/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode*next):v......
  • [LeetCode] 2369. Check if There is a Valid Partition For The Array
    Youaregivena 0-indexed integerarray nums.Youhavetopartitionthearrayintooneormore contiguous subarrays.Wecallapartitionofthearray valid ifeachoftheobtainedsubarrayssatisfies one ofthefollowingconditions:Thesubarraycon......
  • 剑指 Offer 09. 用两个栈实现队列
    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回-1)示例1:输入:["CQueue","appendTail","deleteHead","deleteHead","deleteHead"][[],[3],......
  • 剑指 Offer 12. 矩阵中的路径
    力扣官方解法:classSolution{public:boolexist(vector<vector<char>>&board,stringword){inth=board.size(),w=board[0].size();vector<vector<int>>visited(h,vector<int>(w));for(inti=0......