有序链表转换二叉搜索树(LeetCode)
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ \-3 9/ /-10 5
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution {public TreeNode sortedListToBST(ListNode head) {if(head==null)return null;ListNode l1=head,l2=head;int count=0;while(l1!=null){l1=l1.next;count++; //得到链表的长度 }// for(int i=0;i<count/2;i++){// l2=l2.next; //得到链表的中点// }return buildBST(head,0,count-1);}public TreeNode buildBST(ListNode head,int l,int r){if(l>r)return null;int mid=(l+r)/2;ListNode tem=head;for(int i=0;i<mid;i++)tem=tem.next; //每次递归都要遍历链表TreeNode root=new TreeNode(tem.val);root.left=buildBST(head,l,mid-1);root.right=buildBST(head,mid+1,r);return root;} }
思路2:先转化为数组,再转化为有序数组转换二叉探索树。
参考:
leetcode- 将有序数组转换为二叉搜索树(java)
class Solution {public TreeNode sortedListToBST(ListNode head) {if(head==null)return null;int count=0;ListNode l1=head;while(l1!=null){l1=l1.next;count++;}int[] nums=new int[count];for(int i=0;i<count;i++){nums[i]=head.val;head=head.next; //转化为数组 }return buildBST(nums,0,count-1); //将排序数组转为二叉探索树 }public TreeNode buildBST(int[] nums,int l,int r){if(l>r)return null; int mid=(l+r)/2;TreeNode root=new TreeNode(nums[mid]);root.left=buildBST(nums,l,mid-1);root.right=buildBST(nums,mid+1,r);return root;} }
新的思路:
class Solution {public TreeNode sortedListToBST(ListNode head) { //注意若子树只有两个节点,只需以首节点为根构造右子节点为其后节点的子树if(head==null)return null;if(head.next==null)return new TreeNode(head.val);ListNode fast=head,slow=head,last=slow;while(fast.next!=null&&fast.next.next!=null){last=slow; //这里执行到最后一步的时候,last只比slow慢一个指针。slow=slow.next;fast=fast.next.next; }TreeNode root=new TreeNode(slow.val);fast=slow.next;//fast部分的链表转化为右子树if(slow!=last){ last.next=null;root.left=sortedListToBST(head);}root.right=sortedListToBST(fast);return root;} }
转载于:https://www.cnblogs.com/patatoforsyj/p/10062762.html
有序链表转换二叉搜索树(LeetCode)相关推荐
- ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 109. 有序链表转换二叉搜索树
链接:109. 有序链表转换二叉搜索树 题解:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/so ...
- 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考
三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...
- LeetCode(109):有序链表转换二叉搜索树
Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...
- LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)
1. 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 来源:力扣(LeetC ...
- [Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]
[问题描述][中等] [解答思路] 1. 分治 快慢指针 复杂度 class Solution {public TreeNode sortedListToBST(ListNode head) {ret ...
最新文章
- 灯泡亮度控制单片机_南航电赛-灯光控制系统
- PostgreSQL JDBC SQLWarning
- 第一行代码学习笔记第三章——UI开发的点点滴滴
- ppp chap 加密摘要_“网络工程师培训”基础教程:一文读懂PPP协议
- python网站用什么数据库_PyMySQL数据库的使用
- C# 操作IIS服务器Demo
- BZOJ_1601_[Usaco2008_Oct]_灌水_(最小生成树_Kruskal)
- 分布式技术追踪 2018年第二期
- 任天堂连遭数据泄露,《动森》太火爆惊动黑客?
- webservice发布及远程调用
- AXI仿真之AXI Chip2Chip
- 简述 Erasure Code,EC 纠删码原理
- 阿里云思维导图系列(一)开篇
- lazyLoad-懒加载
- robots协议文件的写法及语法属性解释
- windows平台上实现websocket服务器
- 苹果手机群控 ios免越狱中控 非越狱脚本高清投屏
- linux下构建Smokeping网络监控平台
- 技术盛典,2016AppCan移动开发者大会即将开启
- 微信小程序(二)首页之搜索框
热门文章
- tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
- java加密字符串,可解密
- mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...
- 【mysql】SCOPE_IDENTITY 和 @@IDENTITY的区别
- 【Zabbix】yum方式安装zabbix
- htc m8 wp android,区别仅系统?WP/Android两版HTC One M8对比
- rewrite.php wordpress 缓存 固定连接,【转】Wordpress中文标签无法正常连接 - 完美解决方案...
- 孩子有必要学python吗_不学就落后了?孩子都能学得Python编程,究竟是什么?
- 机器学习(二)梯度下降
- 开源的恶果,程序员正在「自掘坟墓」