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

高端网站建设 n磐石网络实验室网站模板

高端网站建设 n磐石网络,实验室网站模板,如何提高网站加载速度慢,宁波seo优化项目根源简述 这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧 题目描述 整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转…

根源简述

        这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧


题目描述

        整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转 (尽可能少的时间复杂度和空间复杂度),如果不能为什么?


解题思路

这道题想都不用想,一定是能转的,要不然考你干啥,接下来就看怎么转
我们可以把这个题拆成两个部分
1.整数无序双向链表进行排序

2.利用BST的性质(中序遍历有序),将排好序的双向链表再转为BST
这么一拆,就清晰的多了,就能逐个击破,下面来让我们看一下代码是怎么实现的

代码实现

class ListNode {int val;ListNode prev;ListNode next;ListNode(int val) {this.val = val;}
}class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}
}public class DoublyLinkedListToBST {// 将双向链表进行排序public ListNode sortDoublyLinkedList(ListNode head) {// 如果链表为空或只有一个节点,直接返回if (head == null || head.next == null) {return head;}// 找到链表的中间节点ListNode middle = getMiddle(head);ListNode middleNext = middle.next;// 将链表从中间断开middle.next = null;if (middleNext!= null) {middleNext.prev = null;}// 递归排序左半部分链表ListNode left = sortDoublyLinkedList(head);// 递归排序右半部分链表ListNode right = sortDoublyLinkedList(middleNext);// 合并左右两个已排序的链表return merge(left, right);}// 找到链表的中间节点public ListNode getMiddle(ListNode head) {if (head == null) {return head;}ListNode slow = head;ListNode fast = head;while (fast.next!= null && fast.next.next!= null) {fast = fast.next.next;slow = slow.next;}return slow;}// 合并两个已排序的链表public ListNode merge(ListNode head1, ListNode head2) {ListNode dummyNode = new ListNode(0);ListNode cur = dummyNode;while (head1!= null && head2!= null) {if (head1.val <= head2.val) {cur.next = head1;head1.prev = cur;head1 = head1.next;} else {cur.next = head2;head2.prev = cur;head2 = head2.next;}cur = cur.next;}if (head1!= null) {cur.next = head1;head1.prev = cur;}if (head2!= null) {cur.next = head2;head2.prev = cur;}ListNode head = dummyNode.next;head.prev = null;return head;}// 将排好序的双向链表转为二叉搜索树ListNode head;public TreeNode sortedListToBST(ListNode head) {this.head = head;int n = getSize(head);return sortedListToBSTHelper(n);}public int getSize(ListNode head) {if (head == null) {return 0;}int count = 0;ListNode cur = head;while (cur!= null) {count++;cur = cur.next;}return count;}public TreeNode sortedListToBSTHelper(int n) {if (n <= 0) {return null;}// 递归构建左子树TreeNode leftSubtree = sortedListToBSTHelper(n / 2);// 创建当前节点TreeNode root = new TreeNode(this.head.val);// 连接左子树root.left = leftSubtree;// 移动链表指针到下一个节点this.head = this.head.next;// 递归构建右子树TreeNode rightSubtree = sortedListToBSTHelper(n - n / 2 - 1);// 连接右子树root.right = rightSubtree;return root;}
}

附言

如果上述代码看不懂的话,建议先把这两道题刷一下
148. 排序链表 - 力扣(LeetCode)
109. 有序链表转换二叉搜索树 - 力扣(LeetCode)

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

相关文章:

  • 四平市住房和畅想建设局网站做网站网上接单
  • 网站建设与维护的软件android下载安装app
  • 如何看网站是不是织梦做的什么是网站优化
  • 如何做网络营销网站做网站需要知道的简单代码
  • 怎么做整人点不完的网站视频企业网站源码 php
  • 外贸网站的公司介绍怎么建立类似百度问答的网站
  • 湘潭网站建设 要选磐石网络西安有几个区
  • 外贸网站建设推广方案小白网站搭建教程
  • 网站建设风险管理计划书新闻头条最新消息30字
  • 论文个人网站建设怎样将自己做的网页加入网站
  • 优秀的学校网站欣赏陕西省住房城乡建设厅网站管理中心
  • 国外设计网站app王也道长头像
  • 新农村网站建设wordpress页面模板目录文件
  • 建筑效果图网站推荐图书馆网站开发总结
  • 动漫设计网站中国建筑工程总公司招聘
  • 网站建设费无形资产摊销wordpress 微信 模板
  • 网站建立有哪些功能杭州有做网站
  • 个人服务器搭建做网站wordpress多用户博客系统
  • 给网站做绝对路径小企业网站建设有多少
  • 做的好的网站开发做网站滨州市
  • 深圳专业网站建设制作价格低wordpress虚拟产品
  • 长沙品牌网站制作服务报价顺企网企业名录
  • 集团公司网站建设帮人做淘宝网站骗钱
  • 国企网站建设需要注意微信上打开连接的网站怎么做的
  • 手表网站排名186信息网怎么提高关键词搜索权重
  • 株洲建设公司网站江苏昨天出大事
  • 网站的建设哪个好河北省建设执业注册中心网站
  • 会计做帐模板网站网页美工设计的要点分别是什么
  • 新注册网站微信推广多少钱一次
  • 机械设备上哪个网站做外贸推广借贷网站建设方案