给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
您在真实的面试中是否遇到过这个题?
哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Snapchat Tencent Twitter Uber Xiaomi Yahoo Yelp Zenefits
样例
标签 Expand
相关题目 Expand
您在真实的面试中是否遇到过这个题?
哪家公司问你的这个题? Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Snapchat Tencent Twitter Uber Xiaomi Yahoo Yelp Zenefits
样例
标签 Expand
相关题目 Expand
解题思路:
递归+链表操作即可。
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param head: The first node of linked list.
* @return: a tree node
*/
public TreeNode sortedListToBST(ListNode head) {
// write your code here
if(head==null) return null;
int len = 0;
ListNode count = head;
while (count != null) {
len++;
count = count.next;
}
if (1 == len) {
TreeNode root = new TreeNode(head.val);
return root;
} else if (2 == len) {
TreeNode root = new TreeNode(head.val);
root.right = new TreeNode(head.next.val);
return root;
} else {
len = len / 2;
ListNode mid = head;
for(int i=0;i<len;i++){
mid = mid.next;
}
ListNode left = head;
while(left.next!=mid)
left = left.next;
left.next = null;
TreeNode root = new TreeNode(mid.val);
ListNode right = mid.next;
root.left = sortedListToBST(head);
root.right = sortedListToBST(right);
return root;
}
}
}