leetcode109. 有序链表转换二叉搜索树(深度优先搜索/快慢指针)
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
解题思路
先将链表转换成数组,再构造二叉搜索树
代码
/*** 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) {ArrayList<Integer> list=new ArrayList<>();while (head!=null){list.add(head.val);head= head.next;}int[] k=new int[list.size()];for(int c=0;c<k.length;c++)k[c]=list.get(c);return sortedArrayToBST(k);}public TreeNode sortedArrayToBST(int[] nums) {if(nums.length==0) return null;return BST(nums,0,nums.length-1);}public TreeNode BST(int[] nums,int left,int right) {if(left>right) return null;if(left==right) return new TreeNode(nums[left]);int mid=left+((right-left)>>1);TreeNode treeNode=new TreeNode(nums[mid]);treeNode.right=BST(nums,mid+1,right);treeNode.left=BST(nums,left,mid-1);return treeNode;}
}
解题思路
通过快慢指针找链表的中点,进行递归
代码
class Solution {public TreeNode sortedListToBST(ListNode head) {if(head==null) return null;return helper(head,null);}public TreeNode helper(ListNode head,ListNode tail) {if(head==tail) return null;ListNode slow=head,fast=head;while (fast!=tail&&fast.next!=tail){fast=fast.next.next;slow=slow.next;}TreeNode treeNode=new TreeNode(slow.val);treeNode.right=helper(slow.next,tail);treeNode.left=helper(head,slow);return treeNode;}
}
leetcode109. 有序链表转换二叉搜索树(深度优先搜索/快慢指针)相关推荐
- leetcode109. 有序链表转换二叉搜索树
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: [-10 ...
- leetcode109. 有序链表转换二叉搜索树(递归)
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树.本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1.示例:给定的有序链表: [-10, - ...
- 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 109. 有序链表转换二叉搜索树
链接:109. 有序链表转换二叉搜索树 题解:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/so ...
- ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 109. 有序链表转换二叉搜索树 给定一个单链表的头节点 head ,其中的元素 按升序排序 , ...
- 【LeetCode每日一题】——109.有序链表转换二叉搜索树
文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[题目提示] 七[解题思路] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 二叉树 二[题 ...
- Java实现 LeetCode 109 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. ...
- 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考
三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...
- LeetCode(109):有序链表转换二叉搜索树
Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...
最新文章
- 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换
- 提高C++代码质量 - [083]不要返回局部变量的引用
- classpath和读取resources目录下的文件
- Lua 文件 I/O
- Ubuntu开机自动启动script(2)
- python stdout清空_python中stdout输出不缓存的设置方法
- idea远程调试Java应用程序
- 百度语音识别最新资讯
- 深入Linux网络核心堆栈--netfilter详解(整理)
- matlab如何持续存贮多维矩阵,matlab多维矩阵在内存中存储顺序
- excel二维表转化为一维表
- 班长快速统计到班上同学信息(excel表格)
- 罗振宇2018《时间的朋友》--小趋势
- CSS盒子塌陷及解决方法
- Pyecharts - 数据可视化
- 华为SDH传输设备时钟配置方法
- 使用C++实现双链表
- Python FAQ:Web开发
- i5 10210u和1035G1 的区别 哪个好
- 详解atoi/itoa函数