将有序数组转换为二叉搜索树

题目:将有序数组转换为二叉搜索树

描述:本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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
}

  地址:https://mp.weixin.qq.com/s/uYcY_V_GGyZh3T3NcOGjsA

posted @ 2020-07-10 09:59  small_lei_it  阅读(194)  评论(0编辑  收藏  举报