lintcode,排序列表转换为二分查找树
2016-12-15 16:45
525 查看
给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
一刷ac
解题思路:递归实现,需要注意的是链表长度,递归的时候将链表切开。
一刷ac
解题思路:递归实现,需要注意的是链表长度,递归的时候将链表切开。
/** * 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) { if(head == null) return null; if(head.next == null) return new TreeNode(head.val); int len = 0; TreeNode root = null; ListNode tmp = head; while(tmp != null) { tmp = tmp.next; len++; } if(len == 2){ root = new TreeNode(head.val); root.right = new TreeNode(head.next.val); }else{ len = len/2; ListNode listnode = head; for(int i = 0; i < len; i++){ listnode = listnode.next; } ListNode pre =head; while(pre.next != listnode){ pre = pre.next; } pre.next = null; root = new TreeNode(listnode.val); listnode = listnode.next; root.left = sortedListToBST(head); root.right = sortedListToBST(listnode); } return root; } }
相关文章推荐
- LintCode算法题解
- LintCode Majority Number iii
- LintCode-最大数
- lintCode Intersection of Two Arrays II
- Intersection of Two Arrays
- Subtree
- LintCode
- LintCode --number-of-airplanes-in-the-sky(数飞机)
- LintCode --invert-binary-tree(翻转二叉树)
- LintCode --find-the-missing-number(寻找缺失的数)
- LintCode--best-time-to-buy-and-sell-stock(买卖股票的最佳时机)
- LintCode--best-time-to-buy-and-sell-stock-ii(买卖股票的最佳时机 II)
- lintcode之不同子序列数 + 序列II
- lintcode之快速幂
- lintcode删除排序数组中的重复数字 II
- lintcode之数组划分
- leetcode之三数之和 II
- lintcode之 数组剔除元素后的乘积
- lintcode之 合并排序数组 II
- lintcode 之子数组之和