首页 > 代码库 > Leetcode: Convert Sorted List to Binary Search Tree
Leetcode: Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
难度70,与Convert Sorted Array to Binary Search Tree问题相似,这道题的做法就是,我们需要中点来做每一层树的根,问题在于,对于一个链表我们是不能常量时间访问它的中间元素的。于是我的想法是花O(N)的时间把链表里面的元素先存到一个数组或者ArrayList里面,这样就有了一个sorted的数组或者ArrayList,我们就很容易对它递归来建立一个height balanced BST
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; next = null; } 7 * } 8 */ 9 /**10 * Definition for binary tree11 * public class TreeNode {12 * int val;13 * TreeNode left;14 * TreeNode right;15 * TreeNode(int x) { val = x; }16 * }17 */18 public class Solution {19 public TreeNode sortedListToBST(ListNode head) {20 if (head == null) return null;21 ListNode dummy = new ListNode(-1);22 dummy.next = head;23 ListNode cursor = dummy;24 int count = 0;25 while (cursor.next != null) {26 count++;27 cursor = cursor.next;28 }29 int[] array = new int[count];30 cursor = dummy;31 for (int i = 0; i < count; i++) {32 array[i] = cursor.next.val;33 cursor = cursor.next;34 }35 TreeNode result = helper(array, 0, array.length - 1);36 return result;37 }38 39 public TreeNode helper(int[] array, int begin, int end) {40 if (begin > end) return null;41 if (begin == end) return new TreeNode(array[begin]);42 int mid = (begin + end) / 2;43 TreeNode root = new TreeNode(array[mid]);44 root.left = helper(array, begin, mid - 1);45 root.right = helper(array, mid + 1, end);46 return root;47 }48 }
用ArrayList的做法:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; next = null; } 7 * } 8 */ 9 /**10 * Definition for binary tree11 * public class TreeNode {12 * int val;13 * TreeNode left;14 * TreeNode right;15 * TreeNode(int x) { val = x; }16 * }17 */18 public class Solution {19 public TreeNode sortedListToBST(ListNode head) {20 if (head == null) return null;21 22 ArrayList<Integer> listNode = new ArrayList<Integer>();23 while(head != null){24 listNode.add(head.val);25 head = head.next;26 }27 int left = 0;28 int right= listNode.size()-1;29 return helper(listNode, left, right);30 }31 32 public TreeNode helper(ArrayList<Integer> listNode, int left, int right){33 if(left>right) return null;34 35 TreeNode node = new TreeNode(0);36 int mid = (left+right)/2;37 node.val = listNode.get(mid);38 node.left = helper(listNode, left, mid-1);39 node.right = helper(listNode, mid+1, right); 40 return node;41 }42 }
Leetcode: Convert Sorted List to Binary Search Tree
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。