将有序数组转换为二叉搜索树
题目:将有序数组转换为二叉搜索树
描述:本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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 技术无止境,追求更高。