首页 > 其他分享 >108. 将有序数组转换为二叉搜索树

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

时间:2023-11-05 16:13:29浏览次数:36  
标签:index end nums tree mid 二叉 108 数组 root

目录

题目

  • 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

    高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

题解

  • 题目给出的“有序数列”帮助我们满足了“二叉搜索树”的条件,只用关注下标,不用关注值。
  • 思路:每次把一组数最中间的位置,作为树的头拎起来,剩下部分平均分两份就行,要是出多来一个数就分配给左or右,然后递归左子树、右子树
class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:

        def make_tree(start_index, end_index): #只和长度有关
            #首先判定我们的区间是否合理,即left_index要<=right_index
            #当相等时,只有root会产生,不会产生左右小树
            if start_index > end_index:
                return None
            mid_index = (start_index + end_index)//2
            root = TreeNode(nums[mid_index]) #做一个小树的root
            root.left = make_tree(start_index,mid_index-1)#递归左子树
            root.right = make_tree(mid_index+1, end_index)#递归右子树
            return root #做好的小树
        
        return make_tree(0,len(nums)-1) 

标签:index,end,nums,tree,mid,二叉,108,数组,root
From: https://www.cnblogs.com/lushuang55/p/17810545.html

相关文章

  • 102. 二叉树的层序遍历(中)
    目录题目法一、BFS法二、DFS题目给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]法一、BFS......
  • LeetCode101.对称二叉树
    题目描述给你一个二叉树的根节点root,检查它是否轴对称。示例提条的代码importjava.util.List;importjava.util.ArrayList;importjava.util.Deque;importjava.util.LinkedList;importjava.util.Collections;classSolution{publicbooleanisSymmetric(Tr......
  • 无涯教程-批处理 - 数组
    数组在批处理脚本中没有明确定义为一种类型,但可以实现,在批处理脚本中实现数组时,需要注意以下事项。需要使用set命令定义数组的每个元素。需要"for"循环来遍历数组的值。创建数组使用以下set命令创建一个数组。seta[0]=1其中0是数组的索引,而1是分配给数组第一个元素的值。......
  • CF1089K King Kog's Reception 题解
    题目传送门前置知识线段树解法第一眼感觉和luoguP1083[NOIP2012提高组]借教室很像。本题同样采用线段树维护,\(sum_{l,r}(1\lel\ler\le10^6)\)表示从\(l\simr\)时刻内骑士拜访的总时间,\(maxx_{l,r}(1\lel\ler\le10^6)\)表示从\(l\simr\)时刻内骑士......
  • 实验3 类与数组、指针
    实验任务1point.hpp#pragmaonce#include<iostream>usingstd::cout;usingstd::endl;classPoint{public:Point(intx0=0,inty0=0);~Point()=default;intget_x()const;intget_y()const;voidshow()const;voidmo......
  • 实验三-类与数组、指针
    point.hpp1#pragmaonce23#include<iostream>4usingstd::cout;5usingstd::endl;67classPoint{8public:9Point(intx0=0,inty0=0);10~Point()=default;1112intget_x()const;13intget_y()const;1......
  • 查找数组中元素
    查找数组中元素任务详情输入一个固定长度的数组,并输入一个要查找的数,给出能不能检索到的伪代码并测试伪代码fact赋值为0输入长度为8的数组num输入想检索的数searchi赋值为0如果i不超过7{判断num[i]是否等于search等于则fact赋值为1并结束循环i赋值为i+1}如果fact为1......
  • 面试必刷TOP101:21、旋转数组的最小数字
    题目题解二分法:importjava.util.ArrayList;publicclassSolution{publicintminNumberInRotateArray(int[]array){//特殊情况判断if(array.length==0){return0;}//左右指针ijinti=0,j=array.......
  • 数据结构之树(二叉树的存储方式之链表)
    JavaJava中可以使用链表来实现二叉树的存储。1.链表实现二叉树的原理:   链表是由节点组成的数据结构,每个节点包含一个数据和指向下一个节点的指针。  在链表中,可以将二叉树的每个节点都看作一个链表节点,同时维护一个指向左子节点的指针和一个指向右子节点的指针。通过......
  • Java小白学习记录--------常见的一维数组遍历方法
    一维数组:for循环遍历:int[]myArray={1,2,3,4,5};for(inti=0;i<myArray.length;i++){System.out.println("myArray["+i+"]="+myArray[i]);//输出数组中的每个元素} for-each循环遍历数组(增强for循环遍历)int[]myArray={1,2,3,4,5};......