【LeetCode】Convert Sorted List to Binary Search Tree

来源:互联网 发布:网络视频广告报价 编辑:程序博客网 时间:2024/05/29 12:37

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

java code :

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; next = null; } * } *//** * Definition for binary tree * public class TreeNode {  *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode sortedListToBST(ListNode head) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        if(head == null)return null;int len = 0;ListNode tmp = head;while(tmp != null){len++;tmp = tmp.next;}int[] array = new int[len];int i = 0;tmp = head;while(tmp != null){array[i++] = tmp.val;tmp = tmp.next;}TreeNode root = null;    root = recursion(array, 0, i-1, root);array = null;return root;    }    public TreeNode recursion(int[] array, int lhs, int rhs, TreeNode root){if(lhs <= rhs){int mid = (lhs + rhs) >> 1;root = new TreeNode(array[mid]);root.left = recursion(array, lhs, mid - 1, root.left);root.right = recursion(array, mid + 1, rhs, root.right);}return root;}}