Skip to content

Commit 05818e9

Browse files
author
applewjg
committed
update
1 parent 230dead commit 05818e9

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

ConvertSortedListtoBinarySearchTree.java

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
Notes:
88
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
99
10-
Solution: Recursion. Pre-order. O(n)
10+
Solution: 1. Recursion. In-order. O(n)
11+
2. Recursion . Pre-order.
12+
3. pre-order.
1113
*/
1214
/**
1315
* Definition for singly-linked list.
@@ -27,10 +29,30 @@
2729
* }
2830
*/
2931
public class Solution {
30-
public TreeNode sortedListToBST(ListNode head) {
31-
return sortedListToBSTRe(head, null);
32+
public ListNode iter;
33+
public TreeNode sortedListToBST_1(ListNode head) {
34+
iter = head;
35+
int len = 0;
36+
while (head != null) {
37+
++len;
38+
head = head.next;
39+
}
40+
return sortedListToBSTRe1(len);
41+
}
42+
public TreeNode sortedListToBSTRe1(int len) {
43+
if (len == 0) return null;
44+
int mid = len / 2;
45+
TreeNode left = sortedListToBSTRe1(mid);
46+
TreeNode root = new TreeNode(iter.val);
47+
root.left = left;
48+
iter = iter.next;
49+
root.right = sortedListToBSTRe1(len - 1 - mid);
50+
return root;
3251
}
33-
public TreeNode sortedListToBSTRe(ListNode start, ListNode end) {
52+
public TreeNode sortedListToBST_2(ListNode head) {
53+
return sortedListToBSTRe2(head, null);
54+
}
55+
public TreeNode sortedListToBSTRe2(ListNode start, ListNode end) {
3456
if(start == end) return null;
3557
ListNode pre = null;
3658
ListNode slow = start;
@@ -40,11 +62,11 @@ public TreeNode sortedListToBSTRe(ListNode start, ListNode end) {
4062
slow = slow.next;
4163
}
4264
TreeNode node = new TreeNode(slow.val);
43-
node.left = sortedListToBSTRe(start, slow);
44-
node.right = sortedListToBSTRe(slow.next,end);
65+
node.left = sortedListToBSTRe2(start, slow);
66+
node.right = sortedListToBSTRe2(slow.next,end);
4567
return node;
4668
}
47-
public TreeNode sortedListToBST_2(ListNode head) {
69+
public TreeNode sortedListToBST_3(ListNode head) {
4870
if (head == null) return null;
4971
if (head.next==null) return new TreeNode(head.val);
5072
ListNode slow = head;
@@ -59,9 +81,9 @@ public TreeNode sortedListToBST_2(ListNode head) {
5981
TreeNode node = new TreeNode(slow.val);
6082
if(pre!=null) {
6183
pre.next = null;
62-
node.left = sortedListToBST(head);
84+
node.left = sortedListToBST_3(head);
6385
}
64-
node.right = sortedListToBST(fast);
86+
node.right = sortedListToBST_3(fast);
6587
return node;
6688
}
6789
}

0 commit comments

Comments
 (0)