将有序数组转换为二叉搜索树
题目:将有序数组转换为二叉搜索树
描述:本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树
      0
     / \
   -3   9
   /   /
 -10  5
思路:这里,如果我们知道二叉树的中序遍历就是升序序列的话,那这道题就比较清晰了
   选择中间位置左边的数字作为根节点,则根节点的下标 mid = (left + right) / 2,树结构多用递归实现。
代码:
// go
//Definition for a binary tree node.
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}
func sortedArrayToBST(nums []int) *TreeNode {
	return helper(nums, 0, len(nums)-1)
}
func helper(nums []int, left int, right int) *TreeNode {
	if left > right {
		return nil
	}
	mid := (left + right) >> 1 // 等同于(left + right) / 2,位运算效率较高
	// 注意:go 中的位运算符优先级高于加减,必须带括号!
	root := &TreeNode{Val: nums[mid]}
	root.Left = helper(nums, left, mid-1)
	root.Right = helper(nums, mid+1, right)
	return root
}
    small_lei_it  技术无止境,追求更高。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号