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

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

时间:2023-08-18 23:55:25浏览次数:34  
标签:pre head Offer nullptr 36 链表 root 节点

本题比较重要的有两点:

1.一般认为有序的二叉搜索树,都是中序遍历。

2.中序遍历的递归顺序,得到的就是排好序的,就是链表的顺序,因此只需管遍历的过程中的链表指向即可。

class Solution {
public:
    // pre将来指向尾节点,head指向头节点
    Node *pre = nullptr, *head = nullptr;
    Node* treeToDoublyList(Node* root) {
        if(root == nullptr) return root;
        dfs(root);
        head->left = pre;
        pre->right = head;
        return head;
    }
    void dfs(Node *root) {
        if(root == nullptr) return;
        dfs(root->left);  // 左子树
        // 前驱节点右指针指向当前节点
        if(pre != nullptr) pre->right = root;
        // 否则链表正在访问头节点
        else head = root; // 保存链表头节点
        root->left = pre;
        pre = root;
        dfs(root->right);
    }
};

 

标签:pre,head,Offer,nullptr,36,链表,root,节点
From: https://www.cnblogs.com/luxiayuai/p/17641865.html

相关文章

  • 代码随想录算法训练营第三天| 203.移除链表元素 ,707.设计链表 ,206.反转链表
    203.移除链表元素题目给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。第一想法定义一个指针a指向头节点,顺序遍历链表,循环结束的条件是指针a.next为null删除操作是判断a.next.val=val时让a.next=a.next.nex......
  • 剑指 Offer 16. 数值的整数次方(中等)
    题目classSolution{public:doubletraversal(doublex,intn){if(n==0)return1.00000;doubley=traversal(x,n/2);//本题需要对递归时的指数进行二分法,否则超时。returnn%2==0?y*y:y*y*x;//y=(x^4)。n=8,则x^8=y*y;n......
  • LCR 026. 重排链表
    LCR026.重排链表/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode(intval,ListNodenext){this.val=val;this.next......
  • 剑指 Offer 34. 二叉树中和为某一值的路径
    dfsclassSolution{public:vector<vector<int>>res;vector<int>tmp;voiddfs(TreeNode*node,inttarget){if(node==nullptr)return;target-=node->val;tmp.emplace_back(node->val);......
  • C习题-链表
    1.在一个长度为 n ( n>1 )的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。A、删除单链表中的第一个元素B、删除单链表中的最后一个元素C、在单链表第一个元素前插入一个新元素D、在单链表最后一个元素后插入一个新元素答案:B;需要遍历至最后一个元素的......
  • 【剑指Offer】61、序列化二叉树
    【剑指Offer】61、序列化二叉树题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。解题思路:序列化是指将结构化的对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程。反序列化是指将字节流转回结构化的对象的过程,是序列化的逆过程。受第4题:重建二叉树的启......
  • 【剑指Offer】62、二叉搜索树的第k个结点
    【剑指Offer】62、二叉搜索树的第k个结点题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路:本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显......
  • 剑指 Offer 07. 重建二叉树(中等)
    题目:classSolution{//本题思路:利用中序遍历,从前序遍历中找到左、右子树的根节点public:unordered_map<int,int>dic;//创建字典,映射当前根节点在中序遍历中的位置,以便于划分当前根节点的左右子树vector<int>preorder;//即下面的this->preorder......
  • 链表的创建&遍历打印
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-classNode:def__init__(self,item):self.item=itemself.next=None#头插法defcreate_linklist_head(li):head=Node(li[0])forelementinli[1:]:......
  • PowerShell Deep Drive 2-正则审查O365安装日志
    PowerShellDeepDrive2-正则审查O365安装日志前言最近遇到一个问题,在安装O365客户端的时候,遇到安装失败的情况,需要检查O365的安装日志,确定问题。在Office365(现在称为Microsoft365)的安装过程中,系统会生成安装日志以记录安装操作的详细信息。这些日志对于排查安装问题、分析错......