《leetcode-go》有序链表变成二叉搜索树

该博客介绍了如何将一个已排序的单链表转换为一棵平衡的二叉搜索树(BST)。通过迭代方法找到链表的中间节点作为BST的根节点,然后递归地对左右子链表进行同样的操作,确保了树的平衡和搜索效率。代码中定义了链表和树节点的结构,并提供了关键的`sortedListToBST`函数来完成转换过程。
摘要由CSDN通过智能技术生成

给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值