convert sorted list to binary search tree
2014-02-05 12:52
176 查看
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST
思路:已经是sorted list并且按升序排列,那么和in-order traversal的顺序是一致的,所以采用类似in-order的顺序来构建
麻烦的点是recursion,好难理解。。。另外就是reference data type的处理
/**
* 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 {
ListNode p;
public TreeNode sortedListToBST(ListNode head) {
if (head == null) return null;
p = head;
ListNode run = head;
int len = 0;
while(run!=null){
run = run.next;
len++;
}
return sortedListToBST(0,len-1);
}
public TreeNode sortedListToBST(int left, int right){
if(left>right) return null;
int mid = (left+right)/2;
// ListNode q =p;
TreeNode leftC = sortedListToBST(left, mid-1);
TreeNode parent = new TreeNode(p.val);
parent.left = leftC;
p=p.next;
TreeNode rightC = sortedListToBST(mid+1, right);
parent.right = rightC;
return parent;
}
}
思路:已经是sorted list并且按升序排列,那么和in-order traversal的顺序是一致的,所以采用类似in-order的顺序来构建
麻烦的点是recursion,好难理解。。。另外就是reference data type的处理
/**
* 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 {
ListNode p;
public TreeNode sortedListToBST(ListNode head) {
if (head == null) return null;
p = head;
ListNode run = head;
int len = 0;
while(run!=null){
run = run.next;
len++;
}
return sortedListToBST(0,len-1);
}
public TreeNode sortedListToBST(int left, int right){
if(left>right) return null;
int mid = (left+right)/2;
// ListNode q =p;
TreeNode leftC = sortedListToBST(left, mid-1);
TreeNode parent = new TreeNode(p.val);
parent.left = leftC;
p=p.next;
TreeNode rightC = sortedListToBST(mid+1, right);
parent.right = rightC;
return parent;
}
}
相关文章推荐
- Leetcode Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- 【Convert Sorted List to Binary Search Tree】cpp
- [Leetcode]Convert Sorted Array & List to Binary Search Tree
- [LeetCode] Convert Sorted List to Binary Search Tree
- 笨方法求Convert Sorted List to Binary Search Tree
- leetcode_108 Convert Sorted List to Binary Search Tree
- Leetcode:Convert Sorted List to Binary Search Tree
- leetcode: Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- LinkedList-109-Convert Sorted List to Binary Search Tree
- leetcode - Convert Sorted List to Binary Search Tree
- 二叉树-Convert Sorted List to Binary Search Tree
- convert-sorted-list-to-binary-search-tree
- 109. Convert Sorted List to Binary Search Tree
- [LeetCode#109]Convert Sorted List to Binary Search Tree
- LeetCode--convert-sorted-list-to-binary-search-tree
- leetcode: Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- 109 - Convert Sorted List to Binary Search Tree