| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- package main
 
- /**
 
-  * Definition for singly-linked list.
 
-  * type ListNode struct {
 
-  *     Val int
 
-  *     Next *ListNode
 
-  * }
 
-  */
 
- /**
 
-  * Definition for a binary tree node.
 
-  * type TreeNode struct {
 
-  *     Val int
 
-  *     Left *TreeNode
 
-  *     Right *TreeNode
 
-  * }
 
-  */
 
- func sortedListToBSTOld(head *ListNode) *TreeNode {
 
- 	list := make([]int, 0)
 
- 	curr := head
 
- 	for curr != nil {
 
- 		list = append(list, curr.Val)
 
- 		curr = curr.Next
 
- 	}
 
- 	return sortedArrayToBST(list)
 
- }
 
- func sortedArrayToBST(num []int) *TreeNode {
 
- 	length := len(num)
 
- 	if length == 0 {
 
- 		return nil
 
- 	} else if length == 1 {
 
- 		return &TreeNode{num[0], nil, nil}
 
- 	}
 
- 	mid := length / 2
 
- 	root := TreeNode{num[mid], nil, nil}
 
- 	root.Left = sortedArrayToBST(num[:mid])
 
- 	root.Right = sortedArrayToBST(num[mid+1:])
 
- 	return &root
 
- }
 
- func sortedListToBST(head *ListNode) *TreeNode {
 
- 	if head == nil {
 
- 		return nil
 
- 	} else if head.Next == nil {
 
- 		return &TreeNode{head.Val, nil, nil}
 
- 	}
 
- 	return listToBSTHelper(head, nil)
 
- }
 
- func listToBSTHelper(head, tail *ListNode) *TreeNode {
 
- 	if head == tail {
 
- 		return nil
 
- 	}
 
- 	slow := head
 
- 	fast := head
 
- 	for fast != tail && fast.Next != tail {
 
- 		slow = slow.Next
 
- 		fast = fast.Next.Next
 
- 	}
 
- 	root := TreeNode{slow.Val, nil, nil}
 
- 	root.Left = listToBSTHelper(head, slow)
 
- 	root.Right = listToBSTHelper(slow.Next, tail)
 
- 	return &root
 
- }
 
- // func main() {
 
- // 	printTree(sortedListToBST((toLinkedList(
 
- // 		[]int{-10, -3, 0, 5, 9}))))
 
- // 	printTree(sortedListToBST((toLinkedList(
 
- // 		[]int{}))))
 
- // 	printTree(sortedListToBST((toLinkedList(
 
- // 		[]int{1, 2}))))
 
- // }
 
 
  |