zoukankan      html  css  js  c++  java
  • 将有序数组转换为二叉搜索树

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

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

  • 相关阅读:
    20210524
    20210521
    20210520
    20210519
    20210518
    20210517
    字符设备驱动三
    字符设备驱动二
    字符设备驱动一
    git基本操作
  • 原文地址:https://www.cnblogs.com/smallleiit/p/13277769.html
Copyright © 2011-2022 走看看