有序队列类似于中序遍历,又是平衡二叉树,考虑左右子树节点个数一致,所以如果是奇数个值,那根节点就在中间位置,否则根节点可以在中间偏前一个或者后一个,取1/2位置,代码如下所示:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sortedArrayToBST(nums []int) *TreeNode {
return createBst(nums, 0, len(nums)-1)
}
func createBst(nums []int, left,right int)*TreeNode{
if left > right{
return nil
}
mid := (left+right)/2
root := &TreeNode{Val: nums[mid]}
root.Left = createBst(nums, left, mid-1)
root.Right = createBst(nums, mid+1, right)
return root
}