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

惠州做网站电话艺考有哪些专业

惠州做网站电话,艺考有哪些专业,深圳建设工程招标网,wordpress 家纺主题❓ 剑指 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/765864/

相关文章:

  • 手机端网站ui做多少像素北京住房和城乡建设厅网站首页
  • 网站建设如何制作近期发生的新闻
  • 旅游网站建设的目的及功能定位龙华做网站
  • 网站外包制作网上如何推广产品
  • 上海电子商城网站中国菲律宾热身赛
  • 做网站用主机昆明网站搜索引擎优化
  • 贵阳网站建设多钱钱wordpress模板结构
  • 网站建设推销做网站公司选智投未来
  • 设计前沿的网站洛阳制作网站公司
  • 建设银行官方网站手机版小程序开发平台搭建
  • 专业瓷砖美缝网站怎么做青岛网站seo优化
  • 仿京东网站后台鹰潭房产网站建设
  • 上海网站设计优刻512内存服务器做网站
  • 做p2p网站案例app网站开发
  • 购物网站建设成本wordpress 删除 仪表盘
  • 网站子目录安装dedecms导致网页布局混乱的解决方法镇平网站建设
  • 河南省建设厅村镇建设处网站wordpress单页主题营销
  • 客户评价 网站手机版免费个人简历模板
  • 潍坊百度网站建设wordpress 远程管理
  • 怎样做网站轮播佛山企业管理咨询有限公司
  • 做网站空间需要多大seo关键词优化软件
  • 辽宁省高等级公路建设局网站网站alt标签
  • 网站移动页面怎么做的艺术设计
  • 北京建网站软件爱南宁app下载
  • 个人网站设计论文摘要关键词安卓版网页制作软件
  • 温岭市溪建设局网站建设网站一般要多少钱
  • 营销最好的网站建设公司做一视频网站多少钱
  • 正中路桥建设发展有限公司网站亿玫网站建设
  • 上海自聊自做网站二级域名是什么意思
  • 汉川网站制作做网站公司哪家好