109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:异地淘宝客服招聘 编辑:程序博客网 时间:2024/06/07 12:27

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


可以把链表的数取出来变成数组,按照<<Convert Sorted Array to Binary Search Tree>>的办法处理


public class Solution {    public TreeNode sortedListToBST(ListNode head){int[] nums=new int[30000];int cnt=0;while(head!=null){nums[cnt++]=head.val;head=head.next;}return sortedArrayToBST(nums, cnt);}private TreeNode sortedArrayToBST(int[] nums,int len){if (len == 0)return null;return build(0, len - 1, nums);}private TreeNode build(int start, int end, int[] nums){if (start == end)return new TreeNode(nums[start]);if (start > end)return null;int mid = (start + end) >> 1;int num = nums[mid];TreeNode t = new TreeNode(num);t.left = build(start, mid - 1, nums);t.right = build(mid + 1, end, nums);return t;}}



另外不取出来直接处理的版本

https://discuss.leetcode.com/topic/8141/share-my-o-1-space-and-o-n-time-java-code/2


private ListNode node;public TreeNode sortedListToBST(ListNode head) {if(head == null){return null;}int size = 0;ListNode runner = head;node = head;while(runner != null){runner = runner.next;size ++;}return inorderHelper(0, size - 1);}public TreeNode inorderHelper(int start, int end){if(start > end){return null;}int mid = start + (end - start) / 2;TreeNode left = inorderHelper(start, mid - 1);TreeNode treenode = new TreeNode(node.val);treenode.left = left;node = node.next;TreeNode right = inorderHelper(mid + 1, end);treenode.right = right;return treenode;}


0 0
原创粉丝点击