当前位置:首页 » 《随便一记》 » 正文

【LeetCode】剑指 Offer(19)

9 人参与  2023年04月04日 10:01  分类 : 《随便一记》  评论

点击全文阅读


目录

题目:剑指 Offer 36. 二叉搜索树与双向链表 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 36. 二叉搜索树与双向链表 - 力扣(Leetcode)

题目的接口:

/*// Definition for a Node.class Node {public:    int val;    Node* left;    Node* right;    Node() {}    Node(int _val) {        val = _val;        left = NULL;        right = NULL;    }    Node(int _val, Node* _left, Node* _right) {        val = _val;        left = _left;        right = _right;    }};*/class Solution {public:    Node* treeToDoublyList(Node* root) {    }};

解题思路:

这道题,我的想法就是:

中序遍历这一棵二叉搜索树,

然后让他的头指向尾,尾指向头,

递归让每个节点都做一遍,就形成双向链表。

首先中序遍历找到第一个节点cur:

 更新头节点,然后让他指向尾节点,

等找到尾节点时,让尾节点再指向头节点:

 然后继续找下一个头节点与尾节点互指:

 以此类推,

直到中序遍历完整棵二叉搜索树,

最后,再将最开始的头节点head指向最后的尾节点,

最后的尾节点再指向head,

再返回双向链表的头head即可。

代码:

/*// Definition for a Node.class Node {public:    int val;    Node* left;    Node* right;    Node() {}    Node(int _val) {        val = _val;        left = NULL;        right = NULL;    }    Node(int _val, Node* _left, Node* _right) {        val = _val;        left = _left;        right = _right;    }};*/class Solution {public:    Node* treeToDoublyList(Node* root) {        //判断树是否为空        if(root == nullptr)        {            return nullptr;        }        //中序遍历        dfs(root);        //头节点指向尾        head->left = pre;        //尾节点指向头        pre->right = head;        return head;    }private:    //创建头尾节点指针    Node* head, *pre;    //中序遍历实现    void dfs(Node* cur)    {        //遍历到底了,返回上一级        if(cur == nullptr)        {            return;        }        //递归左子树        dfs(cur->left);        //之后每一次到这里,让尾节点指向头节点        if(pre != nullptr)        {            pre->right = cur;        }        else//第一次到这里的时候,让头指针指向cur(中序遍历第一个节点)        {            head = cur;        }        //让头节点指向尾节点        cur->left = pre;        //更新尾节点        pre = cur;        //递归右子树        dfs(cur->right);    }};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。


点击全文阅读


本文链接:http://zhangshiyu.com/post/58281.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1