寫了一個二叉樹構造函數和畫圖函數,方便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.pswp.cn/diannao/73122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73122.shtml
英文地址,請注明出處:http://en.pswp.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;它都能幫你輕松搞定。…