给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
package main
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类
* @return TreeNode类
*/
func sortedListToBST( head *ListNode ) *TreeNode {
// write code here
if head == nil {
return nil
}
if head.Next == nil {
treeNode := new(TreeNode)
treeNode.Val = head.Val
return treeNode
}
if head.Next != nil && head.Next.Next == nil {
treeNode := new(TreeNode)
treeNode.Val = head.Next.Val
treeNode1 := new(TreeNode)
treeNode1.Val = head.Val
treeNode.Left = treeNode1
return treeNode
}
node := head
fastNode := head.Next
//找到中间的位置
var pre = node
var mid = fastNode
for fastNode != nil && fastNode.Next != nil {
pre = node
node = node.Next
mid = node
fastNode = fastNode.Next.Next
}
//偶数个找到下一个作为mid
if fastNode != nil {
pre = mid
mid = mid.Next
}
treeNode := new(TreeNode)
pre.Next = nil
treeNode.Val = mid.Val
treeNode.Left = sortedListToBST(head)
treeNode.Right = sortedListToBST(mid.Next)
mid.Next = nil
return treeNode
}