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

LeetCode 刷题【109. 有序链表转换二叉搜索树】

109. 有序链表转换二叉搜索树

自己做

解:左旋

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {private int countTreeHeight(TreeNode root){if(root == null)return 0;int left = countTreeHeight(root.left);int right = countTreeHeight(root.right);return Integer.max(left, right) + 1;}public TreeNode sortedListToBST(ListNode head) {TreeNode root = null;TreeNode p = null;//插入根结点if(head != null){root = new TreeNode(head.val);p = root;head = head.next;}//后面边插入边调整while(head != null){p.right = new TreeNode(head.val);p = p.right;//插入后破坏平衡,检查有无破坏平衡//找到破坏平衡的最小子树【对应树的根结点为last_q,对应子树的父母为last】TreeNode last = null;TreeNode last_q = null;TreeNode q = root;   while(q != null){int left = countTreeHeight(q.left);int right = countTreeHeight(q.right);  //破坏了平衡的情况if(right - left >= 2){//找最小破坏平衡的子树while(right - left >= 2){last = last_q;last_q = q;q = q.right;left = countTreeHeight(q.left);right = countTreeHeight(q.right);  }//左旋调整if(last_q == root){            //要调整根结点的情况last_q.right = q.left;q.left = last_q;root = q;}else{                          //不用调整根结点的情况last_q.right = q.left;q.left = last_q;                    last.right = q;}//重置检查last = null;last_q = null;q = root;  }//没有破坏平衡,继续往下找else{last = last_q;last_q = q;q = q.right;}}head = head.next;}return  root;}
}

看题解

解:分治

官方题解:

class Solution {ListNode globalHead;public TreeNode sortedListToBST(ListNode head) {globalHead = head;int length = getLength(head);return buildTree(0, length - 1);}public int getLength(ListNode head) {int ret = 0;while (head != null) {++ret;head = head.next;}return ret;}public TreeNode buildTree(int left, int right) {if (left > right) {return null;}int mid = (left + right + 1) / 2;TreeNode root = new TreeNode();root.left = buildTree(left, mid - 1);root.val = globalHead.val;globalHead = globalHead.next;root.right = buildTree(mid + 1, right);return root;}
}

啊哈哈哈哈哈,原来根本不用左旋右旋这些

http://www.dtcms.com/a/461965.html

相关文章:

  • 建设企业网站模板下载黑龙江省建设工程质量安全协会网站
  • VMware 安装 Ubuntu 24.04(稳定版本) 母胎教学
  • 巴城镇建设网站微信微网站制作公司
  • Linux 系统配置 NTP 服务:轻松同步阿里云时间服务器
  • 网站建设公司列表网加强网站建设工作
  • 深度学习之模型的部署、web框架 服务端及客户端案例
  • 《投资-113》价值投资者的认知升级与交易规则重构 - 复利故事终止的前兆
  • 从 “黑盒“ 到 “透明“:SkyWalking 实战指南 —— 让微服务问题无所遁形
  • 网站流量增加专门做物理的网站
  • 鸿蒙应用开发从入门到实战(十七):ArkUI组件List列表布局
  • 论文阅读:arxiv 2025 Scaling Laws for Differentially Private Language Models
  • 如何自己做网站腾讯设计师培训基地
  • live555(笔记)
  • Linux系统编程:(二)基础指令详解(1)
  • 新闻视频网站开发wordpress如何自动采集网站图片
  • 【TIDE DIARY 1】dify日常试错; conda
  • Cucumber + Playwright 教程
  • 门户网站开发设计方案山东聊城建设学校网站
  • LLMs之Ling:Ling-1T的简介、安装和使用方法、案例应用之详细攻略
  • DOpusInstall-13.2.exe 安装方法,简单几步完成
  • 免费的api接口网站wordpress中文主题框架
  • 芯科科技第三代无线SoC现已全面供货
  • 1.c++入门(中)
  • 路桥养护:多交通场景下的差异化实践
  • 算法-快速排序
  • TCP粘包
  • 企业网站源码 asp哪家网站制作 优帮云
  • 整数转字符串 itoa_s () 安全指南
  • OSPF GR(Graceful Restart,平滑重启)
  • 高并发场景下的Reddit访问优化:Cliproxy智能调度系统实测