LeetCode—109. Convert Sorted List to Binary Search Tree
题目
https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/description/
给出一个递增的链表,将其转化成一个平衡二叉搜索树。
思路及解法
与数组转化成平衡二叉树相似。可以直接将list转化成数组,然后用数组转化的方法。当然也可以直接转化。
代码
/**
* 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;
int len = 1;
ListNode listNode = head;
while(listNode.next != null){
listNode = listNode.next;
len++;
}
listNode = head;
int[] nums = new int[len];
for(int i=0; i<len; i++){
nums[i] = listNode.val;
listNode = listNode.next;
}
TreeNode node = createTree(nums, 0, len-1);
return node;
}
public TreeNode createTree(int[] nums, int s, int e){
if(s>e) return null;
int mid = (s+e)/2;
TreeNode node = new TreeNode(nums[mid]);
node.left = createTree(nums, s, mid-1);
node.right = createTree(nums, mid+1, e);
return node;
}
}
/**
* 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;
int len = 1;
ListNode listNode = head;
while(listNode.next != null){
len++;
listNode = listNode.next;
}
TreeNode node = createTree(head, 0, len-1);
return node;
}
public TreeNode createTree(ListNode ln, int s, int e){
if(s>e) return null;
int mid = (s+e)/2;
ListNode midNode = ln;
for(int i=0; i<mid; i++){
midNode = midNode.next;
}
TreeNode node = new TreeNode(midNode.val);
node.left = createTree(ln, s, mid-1);
node.right = createTree(ln, mid+1, e);
return node;
}
}