当前位置: 首页 > article >正文

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

一、问题描述

平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。

二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。

示例 1:

输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

即-10,5作为根节点。

即-3,9作为根节点。

from heapq import heapify, heappop, heappush
from math import inf
from typing import List, Counter
from typing import Optional
from clang.cindex import Config

from pyasn1.compat.octets import null


nums = [-10,-3,0,5,9]



class Solution:
    def sortedArrayToBST1(self, nums: List[int]) -> TreeNode:
        def helper(left, right):
            if left > right:
                return None

            # 总是选择中间位置左边的数字作为根节点
            mid = (left + right) // 2

            root = TreeNode(nums[mid])
            root.left = helper(left, mid - 1)
            root.right = helper(mid + 1, right)
            return root

        return helper(0, len(nums) - 1)

    def sortedArrayToBST2(self, nums: List[int]) -> TreeNode:
        def helper(left, right):
            if left > right:
                return None

            # 总是选择中间位置右边的数字作为根节点
            mid = (left + right + 1) // 2

            root = TreeNode(nums[mid])
            root.left = helper(left, mid - 1)
            root.right = helper(mid + 1, right)
            return root

        return helper(0, len(nums) - 1)


def preorderTraversal(root: Optional[TreeNode]) -> List[int]:  # 前序遍历(根,左,右)
    l = []

    def tree(root):
        if not root:
            return
        l.append(root.val)
        tree(root.left)
        tree(root.right)

    tree(root)
    return l


S = Solution()
print(preorderTraversal(S.sortedArrayToBST1(nums)))
print(preorderTraversal(S.sortedArrayToBST2(nums)))

二、结果展示

[0, -10, -3, 5, 9]
[0, -3, -10, 9, 5]


http://www.kler.cn/a/416039.html

相关文章:

  • Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)
  • 即时通讯| IM+RTC在AI技术加持下的社交体验
  • 蜜罐攻击网络渗透工具推荐
  • houdini肌肉刷pin点的方法
  • 【前端开发】小程序无感登录验证
  • 【C语言篇】探索 C 语言结构体:从基础语法到数据组织的初体验
  • [Redis#7] set | 命令 | 集合 | 用户画像 | UV
  • 【随笔】AI大模型对软件开发的影响
  • 编码器接口测速
  • 宠物领养平台:SpringBoot技术解密
  • 【vue for beginner】Vue该怎么学?
  • 看华为,引入IPD的正确路径
  • 清朗行动再开展,算法安全如何保障
  • springboot+redis+lua实现分布式锁
  • 在PHP中使用正则表达式来处理数据类型验证和提取
  • 强化安全责任意识,传音开展第四届信息及隐私安全文化宣传周活动
  • 数字3D虚拟展厅成熟运用于旅游业
  • 计算机网络基础(2):网络安全/ 网络通信介质
  • NCL数据分析与处理
  • Burp入门(2)-代理功能介绍
  • 一键生成达梦/Oracle/MySQL 数据库实体关系图
  • Rust标准库中集合类型用法详解
  • Spring Boot优雅读取配置信息 @EnableConfigurationProperties
  • 基于 Spring Boot 实现图片的服务器本地存储及前端回显
  • Linuxe包管理工具与软件安装
  • 【工具变量】上市公司企业数字化转型指数(甄红线版本,战略引领、技术驱动、环境支撑、数字化成果及应用)2011-2022年