当前位置: 首页 > news >正文

职教集团网站建设2022年10月国内最新新闻

职教集团网站建设,2022年10月国内最新新闻,wordpress 10万并发,农村淘宝官网首页❓ 剑指 Offer 36. 二叉搜索树与双向链表 难度:中等 输入一棵二叉搜索树,将该二叉搜索树转换成一个 排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为…

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

难度:中等

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

为了让您更好地理解问题,以下面的二叉搜索树为例:
在这里插入图片描述
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。

在这里插入图片描述
特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继。还需要返回链表中的第一个节点的指针。

注意:此题对比原题有改动。

💡思路:中序递归遍历

由二叉搜索树的性质:中序遍历即为 递增序列。所以可以在中序遍历的时候完成双向链表的转化:

定义两个结点 headend 分别指向已转换链表的 头结点尾结点

inOrder(root) :中序递归遍历:

  • 终止条件:当 root 为空时,返回;
  • 递归调用左子树:inOrder(root.left) ;
  • 构建链表:
    • 当到达树的最左边的第一个叶子节点,即为 head
    • end 不为空时,修改双向结点引用, 即 end.right = root, root.left = end
    • 更新 end ,即 end = root;
  • 递归调用右子树, inOrder(root.right)

最后将双向链表首尾相连:head.left = end , end.right = head

🍁代码:(C++、Java)

C++

/*
// 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 {
private:Node* head = nullptr;Node* end = nullptr;void inOrder(Node* root){if(root == nullptr) return;inOrder(root->left);if(head == nullptr) head = root;//树的最左边的第一个叶子节点为headroot->left = end;if(end != nullptr) end->right = root;end = root;inOrder(root->right);}
public:Node* treeToDoublyList(Node* root) {inOrder(root);if(head != nullptr){head->left = end;end->right = head;}return head;}
};

Java

/*
// Definition for a Node.
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;}
};
*/
class Solution {private Node head = null;private Node end = null;private void inOrder(Node root){if(root == null) return;inOrder(root.left);if(head == null) head = root;//树的最左边的第一个叶子节点为headroot.left = end;if(end != null) end.right = root;end = root;inOrder(root.right);}public Node treeToDoublyList(Node root) {inOrder(root);if(head != null){head.left = end;end.right = head;}return head;}
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为二叉树的节点数,中序遍历需要访问所有节点。
  • 空间复杂度 O ( n ) O(n) O(n),最差情况下,即树退化为链表时,递归深度达到 n,系统使用 O ( n ) O(n) O(n) 栈空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

http://www.yayakq.cn/news/213672/

相关文章:

  • 免费网站模版 优帮云江苏建站管理系统信息
  • 正规代做毕业设计的网站seo关键词如何设置
  • 公司做网站费会计科目广东省工程招投标信息网
  • 建设一个网站的过程营销资源网
  • 试用网站cms怎么恶意点击对手竞价
  • 做推广网站费用网页微信客户端手机版
  • 宁波网站开发rswlwordpress $post->id
  • 网站城市切换如何做wordpress仿站教学
  • 成都大丰网站建设例表网建设网站的费用调研
  • 静态网站开发实验报告网站上的高清动态图怎么做的
  • 昌乐哪里有做网站的长沙圭塘网站建设公司
  • 手机网站显示建设中网站建设贰金手指科捷9
  • 周口在线网站建设wordpress VIP系统
  • 怎么做网站推广最有效改图网站
  • 长春网站开发常见的有利于seo的网站系统
  • 网站建设推广怎样找客户wordpress搬家到新浪
  • 大型购物网站建设方案用备案的网站做违法网站
  • 大型电商网站开发规划珠海做网站哪家专业
  • 境外网站icp备案申请表企业网站php模板
  • 苏州网络网站建设wordpress 注册登录插件
  • 怎么让别人找你做网站网站内部链接怎么做
  • 灰色行业做网站推广化妆品行业的网站开发
  • 南昌做网站的公司有哪些wordpress教程_博客吧
  • 做网站那个php好用wordpress做的学校网站
  • 深圳网站建设公司多吗网站开发什么技术
  • 杭州网站制排名好的移动网站建设
  • 网站一键收录百度网站禁止访问怎么解除
  • 怎样做网站域名哪些网站可以做推广
  • 网站模块功能怎样免费做网站视频讲解
  • 蚌埠网站制作哪家好网赢天下深圳网站建设