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

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

时间:2024-12-25 17:53:03浏览次数:1  
标签:head nums process self mid 二叉 int 108 数组

  1. 题目链接

  2. 解题思路:这里面有一个构造「平衡二叉树」,似乎很难。实际上,我们每次构造时都拿中点划分,就能得到平衡的。

    • 具体来说process(nums, L, R)nums[L, R]上构造平衡搜索二叉树,我们以中点mid=(R+L)/2是头,然后左节点process(nums, L, mid - 1),右节点process(nums, mid + 1, R)
  3. 代码

    class Solution:
    
        def process(self, nums: List[int], L: int, R: int) -> Optional[TreeNode]:
            if L > R:
                return None
            if L == R:
                return TreeNode(nums[L])
            mid = int((R + L) / 2)
            head = TreeNode(nums[mid])
            left_head = self.process(nums, L, mid - 1)
            right_head = self.process(nums, mid + 1, R)
            head.left = left_head
            head.right = right_head
            return head
    
    
        def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
            return self.process(nums, 0, len(nums) -1)
    

标签:head,nums,process,self,mid,二叉,int,108,数组
From: https://www.cnblogs.com/ouyangxx/p/18631124

相关文章

  • 105. 从前序与中序遍历序列构造二叉树
    题目链接解题思路:首先我们得知道人工怎么建这棵树。先序遍历[0,R1]第一个节点,就是根。然后我们在中序遍历[0,R2]找到根的位置,假如是x,那么,中序遍历中[0,x-1]就是左子树,中序遍历中[x+1,R2]就是右子树。那么先序遍历呢?左子树节点个数是x个,先序遍历是要先遍历完左子树,才能到......
  • 「数据结构课程设计」二叉排序树与文件操作
    功能要求:(1)从键盘输入一组学生记录建立二叉排序树;(2)中序遍历二叉排序树;(3)求二叉排序树深度;(4)求二叉排序树的所有节点数和叶子节点数;(5)向二叉排序树插入一条学生记录;(6)从二叉排序树中删除一条学生记录;(7)从二叉排序树中查询一条学生记录;(8)以广义表的形式输出二叉排序树该文件也......
  • 103. 二叉树的锯齿形层序遍历
    题目链接解题思路:和层序遍历有明显的不同。通过观察,可以得到,当前层,和下一层的顺序是「相反」的,遇到这种相反的问题,考虑用栈。本题就是用两个栈,一个栈在放入时,先放左儿子,再放右儿子,另一个栈在放入时,先放右儿子,再放左儿子。然后两个栈交替使用即可。为什么能得到这个思路?观察......
  • 102. 二叉树的层序遍历
    题目链接解题思路:层序遍历就用队列,唯一需要注意的就是,要每一层单独收集,所以要用一个变量,记录每一层需要收集的数目,同时还要记录下一层需要收集的数目代码classSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:ifroot==No......
  • 二叉树的最近公共祖先(递归)
    给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例1:输入:root=[3,5,1,6,2,0,8,null,n......
  • 101. 对称二叉树
    题目链接解题思路:递归的思路,就是左子树和右子树的值相等,同时,左子树的左子树与右子树的右子树要相似,左子树的右子树与右子树的左子树要相似。看代码很清晰代码classSolution:defprocess(self,node1,node2)->bool:ifnode1==Noneandnode2==None......
  • 94. 二叉树的中序遍历
    题目链接解题思路:中序遍历:左中右,用一个栈,同时用空来标识「中」,所以入栈顺序就是右->中->None->左代码classSolution:definorderTraversal(self,root:Optional[TreeNode])->List[int]:#使用栈#中序的顺序,左中右压栈就是右中左为了标......
  • 详细介绍 JavaScript 数组的常用方法
     1.数组元素访问和修改方法constarr=['a','b','c'];//添加/删除元素arr.push('d');//末尾添加元素,返回新长度arr.pop();//删除最后一个元素,返回被删除的元素arr.unshift('x');//开头添加元素,返回新长度arr.shift();......
  • 从前序与中序遍历序列构造二叉树(递归)
    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例1:输入:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]输出:[3,9,20,null,null,15,7]示例2:输入:preorder=......
  • 二叉树展开为链表(先序遍历)
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,......