写了一个二叉树构造函数和画图函数,方便debug

代码 

class TreeNode(object):def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = rightdef construct_tree(nodes):if not nodes:return Noneroot = TreeNode(nodes[0])queue = [root]index = 1while index < len(nodes):node = queue.pop(0)if nodes[index] is not None:node.left = TreeNode(nodes[index])queue.append(node.left)index += 1if index < len(nodes) and nodes[index] is not None:node.right = TreeNode(nodes[index])queue.append(node.right)index += 1return rootimport matplotlib.pyplot as pltdef draw_tree(root):if not root:return# 获取树的高度def get_height(node):if not node:return 0return 1 + max(get_height(node.left), get_height(node.right))height = get_height(root)node_count = 2 ** height - 1node_positions = {}# 使用层序遍历确定每个节点的位置queue = deque([(root, 0, 0)])  # (节点, 层级, 水平位置)while queue:node, level, x = queue.popleft()y = height - level - 1  # 从底部开始绘制node_positions[node] = (x, y)if node.left:queue.append((node.left, level + 1, x - 2 ** (height - level - 2)))if node.right:queue.append((node.right, level + 1, x + 2 ** (height - level - 2)))# 绘制节点和连接线fig, ax = plt.subplots(figsize=(10, 10))ax.set_xlim(-node_count, node_count)ax.set_ylim(-1, height)ax.axis('off')for node, (x, y) in node_positions.items():# 绘制节点ax.text(x, y, str(node.val), ha='center', va='center',bbox=dict(facecolor='white', edgecolor='black', boxstyle='circle'))# 绘制连接线if node.left and node.left in node_positions:x1, y1 = node_positions[node.left]ax.plot([x, x1], [y, y1], 'black')if node.right and node.right in node_positions:x1, y1 = node_positions[node.right]ax.plot([x, x1], [y, y1], 'black')plt.show()# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':print_hi('PyCharm')solution = Solution()nodes = [3,9,20,None,None,15,7,8,6,8,5,4,6,1,2]root = construct_tree(nodes)draw_tree(root)

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT:串口上位机

创建工程 布局UI界面 设置名称 设置数据 设置波特率 波特率默认9600 设置数据位 数据位默认8 设置停止位 设置校验位 调整串口设置、接收设置、发送设置为Group Box 修改配置 QT core gui serialport 代码详解 mianwindow.h 首先在mianwindow.h当中定义一个串口指…

【Pandas】pandas Series asof

Pandas2.2 Series Time Series-related 方法描述Series.asfreq(freq[, method, how, …])用于将时间序列数据转换为指定的频率Series.asof(where[, subset])用于返回时间序列中指定索引位置的最近一个非缺失值 pandas.Series.asof pandas.Series.asof 方法用于返回时间序列…

沉浸式CSS学习路径

好的!我将以魔法学院成长故事为框架,为您设计一套沉浸式CSS学习路径。以下是叙事化学习提纲: 第一卷:像素学徒的觉醒 章节1:被封印的魔法书 发现HTML的"素颜"本质,通过<!DOCTYPE html>解除网页封印用style标签打开CSS魔法书,学会给文字穿上color斗篷和…

使用netlify部署github的vue/react项目或本地的dist,国内也可以正常访问

提供简洁的部署流程和丰富功能&#xff0c;如自定义域名、自动构建和服务器端功能。通过连接到 Git 仓库实现持续部署&#xff0c;每次推送代码都会自动构建和发布&#xff0c;支持无服务器函数&#xff0c;允许在前端项目中实现后端逻辑&#xff0c;提供直观的用户界面来管理和…

复现 MoGe

要复现 MoGe&#xff0c;以下给出一般性的复现训练过程步骤示例&#xff09;的训练过程&#xff0c;你可以参考以下步骤&#xff1a; 环境准备 安装必要的深度学习框架&#xff0c;如 TensorFlow 或 PyTorch&#xff0c;以及相关的库&#xff0c;例如用于数据处理的 NumPy、Pan…

Redis-缓存穿透击穿雪崩

1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中&#xff0c;先查缓存&#xff0c;缓存没有数据&#xff0c;就会请求到数据库上&#xff0c;导致数据库压力剧增。 解决方法&#xff1a; 给不存在的key加上空值&#xff0c;防止每次都会请求到数据库。布隆过滤器…

如何在自己的网站接入API接口获取数据?分步指南与实战示例

将第三方API接入自己的网站是获取实时数据、扩展功能的重要手段&#xff08;如展示商品、同步订单、用户登录等&#xff09;。以下是完整的接入流程与关键实践&#xff0c;以微店API为例&#xff0c;适用于多数开放平台。 一、准备工作&#xff1a;注册与权限申请 注册开发者…

刷leetcode hot100--动态规划3.12

第一题乘积max子数组[1h] emmmm感觉看不懂题解 线性dp【计划学一下acwing&#xff0c;挨个做一下】 线性动态规划 相似题解析 最长上升子序列 最大上升子序列和 最大连续子段和 乘积最大子数组_哔哩哔哩_bilibili 比较奇怪的就是有正负数和0&#xff0c;如何处理&#xff1f…

Pytortch深度学习网络框架库 torch.no_grad方法 核心原理与使用场景

在PyTorch中&#xff0c;with torch.no_grad() 是一个用于临时禁用自动梯度计算的上下文管理器。它通过关闭计算图的构建和梯度跟踪&#xff0c;优化内存使用和计算效率&#xff0c;尤其适用于不需要反向传播的场景。以下是其核心含义、作用及使用场景的详细说明&#xff1a; 一…

postgresql 数据库使用

目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…

为什么大模型网站使用 SSE 而不是 WebSocket?

在大模型网站&#xff08;如 ChatGPT、Claude、Gemini 等&#xff09;中&#xff0c;前端通常使用 EventSource&#xff08;Server-Sent Events, SSE&#xff09; 来与后端对接&#xff0c;而不是 WebSocket。这是因为 SSE 更适合类似流式文本生成的场景。下面我们详细对比 SSE…

TDengine 数据对接 EXCEL

简介 通过配置使用 ODBC 连接器&#xff0c;Excel 可以快速访问 TDengine 的数据。用户可以将标签数据、原始时序数据或按时间聚合后的时序数据从 TDengine 导入到 Excel&#xff0c;用以制作报表整个过程不需要任何代码编写过程。 前置条件 准备以下环境&#xff1a; TDen…

【具身相关】legged_gym, isaacgym、rsl_rl关系梳理

【legged_gym】legged_gym, isaacgym代码逻辑梳理 总体关系IsaacGymlegged_gymrsl_rl三者的关系 legged_gym代码库介绍环境模块env 总体关系 IsaacGym Isaac Gym 是 NVIDIA 开发的一个高性能物理仿真平台&#xff0c;专门用于强化学习和机器人控制任务。它基于 NVIDIA 的 Phy…

【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸

1、HarmonyOS 怎么用一个变量观察其他很多个变量的变化&#xff1f; 有一个提交按钮的颜色&#xff0c;需要很多个值非空才变为红色&#xff0c;否则变为灰色&#xff0c;可不可以用一个变量统一观察这很多个值&#xff0c;去判断按钮该显示什么颜色&#xff0c;比如Button().…

全链条自研可控|江波龙汽车存储“双轮驱动”体系亮相MemoryS 2025

3月12日&#xff0c;MemoryS 2025在深圳盛大开幕&#xff0c;汇聚了存储行业的顶尖专家、企业领袖以及技术先锋&#xff0c;共同探讨存储技术的未来发展方向及其在商业领域的创新应用。江波龙董事长、总经理蔡华波先生受邀出席&#xff0c;并发表了题为《存储商业综合创新》的主…

基于Python+SQLite实现校园信息化统计平台

一、项目基本情况 概述 本项目以清华大学为预期用户&#xff0c;作为校内信息化统计平台进行服务&#xff0c;建立网页端和移动端校内信息化统计平台&#xff0c;基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求&#xff0c;如活动报名、实验室招募、多…

(每日一题) 力扣 2418. 按身高排序

文章目录 &#x1f984; LeetCode 2418.按身高排序&#xff5c;双解法对比与下标排序的精妙设计&#x1f4dd; 问题描述&#x1f4a1; 解法思路分析方法一&#xff1a;Pair打包法&#xff08;直接排序&#xff09;方法二&#xff1a;下标排序法&#xff08;当前实现&#xff09…

计算机毕业设计:ktv点歌系统

ktv点歌系统mysql数据库创建语句ktv点歌系统oracle数据库创建语句ktv点歌系统sqlserver数据库创建语句ktv点歌系统springspringMVChibernate框架对象(javaBean,pojo)设计ktv点歌系统springspringMVCmybatis框架对象(javaBean,pojo)设计 ktv点歌系统mysql数据库版本源码&#xf…

Deepin通过二进制方式升级部署高版本 Docker

一、背景&#xff1a; 在Deepin系统中通过二进制方式升级部署高版本 Docker&#xff0c;下面将详细介绍二进制方式升级部署高版本 Docker 的具体步骤。 二、操作步骤 1.根据需求下载二进制文件&#xff0c;下载地址如下&#xff1a; https://mirrors.tuna.tsinghua.e…

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…