LeetCode 662. 二叉樹的最大寬度

文章目錄

  • LeetCode 662. 二叉樹的最大寬度
    • 題目描述
    • 思路
    • Golang 代碼

LeetCode 662. 二叉樹的最大寬度

在這里插入圖片描述
記錄一次刷題的感悟。這道題目是我人生第一次面試的時候的手撕題目,但臨場的時候面試官沒有為難我,他考察的問題是求二叉樹的最大寬度,但是不需要考慮 null 結點,也就是空的結點不計入寬度當中。

當我再次刷到這道題,發現當初面試的時候自己的理解有問題,計算寬度的時候應該考慮 null 結點,比如對于下面這樣一棵樹:
請添加圖片描述
這棵樹的最大寬度就是 7,而不是 2。

有了這一層限制,這道題目就具有了一定的難度,下面開始分析解這道題的思路。

題目描述

請添加圖片描述

思路

我們使用 BFS 來解這道問題。

其實從后驗的角度來說,這道題目沒有什么難度,但是難就難在臨場想不到這道題的正確思路。

正確的思路其實是,新開一個數據結構,同時保存二叉樹的結點以及當前節點的編號。每一次計算一層的最大的寬度時,計算隊列頭和隊列尾兩個二叉樹結點之間編號的差值。

二叉樹結點的編號計算規則如下:對于當前的結點 i i i,它的左孩子結點編號為 2 × i 2 \times i 2×i,右孩子結點編號為 2 × i + 1 2 \times i + 1 2×i+1。基于二叉樹結點的編號,我們甚至可以在一個數組當中存儲二叉樹。堆排序正是利用了這條性質,在數組當中利用二叉樹建堆來實現最大堆或最小堆。

Golang 代碼

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
type pair struct {node  *TreeNodeindex int
}func widthOfBinaryTree(root *TreeNode) int {ans := 1q := []pair{}q = append(q, pair{root, 1})for len(q) > 0 {ans = max(ans, q[len(q) - 1].index -  q[0].index + 1)currLen := len(q)for i := 0; i < currLen; i ++ {p := q[0]; q = q[1:]if p.node.Left != nil {q = append(q, pair{p.node.Left, 2 * p.index})}if p.node.Right != nil {q = append(q, pair{p.node.Right, 2 * p.index + 1})}}}return ans
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85490.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85490.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【linux】bash腳本中括號問題

在 Bash 腳本里&#xff0c;中括號 [ ] 其實是 test 命令的同義詞&#xff0c;[ 是一個命令&#xff0c;] 是該命令的最后一個參數&#xff0c;所以中括號內外的空格會影響命令執行&#xff0c;下面詳細說明&#xff1a; 中括號內側空格 中括號內側與操作數之間必須有空格&…

Ruoyi(若依)整合websocket實現信息推送功能(消息鈴鐺)

實現消息推送功能 來了&#xff0c;來了&#xff0c;大家做系統應該是最關心這個功能。 【思路】 需求&#xff1a;對全系統【所有的業務操作】進行消息推送&#xff0c;有【群發】、【私發】功能、處理【消息狀態&#xff08;未讀/已讀&#xff09;】&#xff0c;websocket持…

小白的進階之路系列之十五----人工智能從初步到精通pytorch綜合運用的講解第八部分

torch.nn 究竟是什么? PyTorch 提供了設計精良的模塊和類,如 torch.nn、torch.optim、Dataset 和 DataLoader,幫助你創建和訓練神經網絡。為了充分利用它們的能力并根據你的問題進行定制,你需要真正理解它們到底在做什么。為了幫助你理解這一點,我們將首先在不使用這些模…

JavaScript 數據結構詳解

最近在復習JavaScript的基礎知識&#xff0c;和第一次學確實有了很不一樣的感受&#xff0c;第一次學的比較淺&#xff0c;但是回頭再進行學習的時候&#xff0c;發現有很多遺漏的東西&#xff0c;所以今天想分享一下新學到的知識&#xff0c;后面會一點一點補充更新 JavaScrip…

c++面試題(14)------順時針打印矩陣

操作系統&#xff1a;ubuntu22.04 IDE:Visual Studio Code 編程語言&#xff1a;C11 題目描述 輸入一個矩陣&#xff0c;按照從外向里以順時針的順序依次打印出每一個元素。 例如&#xff1a; 輸入矩陣&#xff1a; [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ]輸出&…

《Go語言圣經》defer

《Go語言圣經》defer 核心概念&#xff1a;defer語句的執行時機 defer是Go語言的一個關鍵字&#xff0c;它的作用是&#xff1a;延遲執行一個函數調用&#xff0c;該調用會在包圍它的函數返回前一刻執行。 關鍵點&#xff1a; defer語句會在函數即將返回時執行&#xff0c;…

WEB3 的 WebSocket Provider連接方式

1. 什么是 WebSocket Provider? WebSocket Provider 是 web3.js 中用于通過 WebSocket 協議 與以太坊節點(如 Infura、Geth、Parity)建立持久化連接的通信方式。它允許雙向實時數據傳輸,適用于需要實時監聽區塊鏈事件的場景。 核心特點 雙向通信:客戶端和服務器可以主動…

三國大模型:智能重構下的亂世文明圖譜

引言&#xff1a;當赤壁烽煙遇見深度學習 一件動態的《全本三國演義》正通過全息投影技術演繹群雄逐鹿的史詩。這個虛實交融的場景&#xff0c;恰似三國大模型技術的隱喻——以人工智能為紐帶&#xff0c;連接起漢末三國的烽火狼煙與數字時代的文明重構。作為人工智能與歷史學…

AWS數據庫遷移實戰:本地MySQL零停機上云方案

一、遷移場景 本地環境&#xff1a;自建MySQL 5.7&#xff08;數據量500GB&#xff09;&#xff0c;業務要求遷移停機時間<5分鐘 目標架構&#xff1a; 二、遷移四步法 步驟1&#xff1a;環境準備&#xff08;耗時30分鐘&#xff09; 1.1 創建Aurora MySQL # AWS CLI創…

uni-app 安卓 iOS 離線打包參考

App 離線打包 原生工程配置 安卓&#xff1a;【uniapp】uniapp 離線打包安卓應用或者云打包發布 app 步驟&問題記錄 iOS&#xff1a;uni-app實現XCode蘋果本地離線打包APP

mysql History List Length增長

HLL 持續增長導致問題 History List Length&#xff08;HLL&#xff09;是InnoDB存儲引擎中用于衡量未清理的undo日志記錄數量的指標。當HLL持續增長時&#xff0c;可能對數據庫性能和業務產生以下影響&#xff1a; 事務處理延遲增加 高HLL值意味著大量未清理的undo日志&…

VMware替代 | 南京地鐵采用ZStack ZSphere虛擬化承載核心業務

南京地鐵作為中國主要城市軌道交通系統之一&#xff0c;運營規模龐大&#xff0c;地鐵線路覆蓋全市主要區域。其核心業務系統&#xff08;包括列車調度、信號控制、乘客信息系統等&#xff09;原部署在VMware平臺上。然而&#xff0c;隨著VMware產品全面轉向訂閱制&#xff0c;…

Electron自動更新詳解—包教會版

★ 本人在公司項目中實現的Electron更新功能。 ★ 將實現更新過程的每一步都總結了出來&#xff0c;以及過程中我遇到了哪些問題&#xff0c;如何去解決的問題&#xff0c;有哪些注意事項。 ★ 使用貼合實際應用的HTTP服務器做為載體實現更新&#xff0c;而非github。 開始&…

Apache RocketMQ 消息過濾的實現原理與騰訊云的使用實踐

導語 本文將系統闡述 Apache RocketMQ 消息過濾機制的技術架構與實踐要點。首先從業務應用場景切入&#xff0c;解析消息過濾的核心價值&#xff1b;接著介紹 Apache RocketMQ 支持的兩種消息過濾實現方式&#xff0c;幫助讀者建立基礎認知框架&#xff1b;隨后深入剖析 SQL 語…

安卓JetPack篇——LifeCycle原理

LifeCycle 一、什么是Lifecycle 具備宿主生命周期感知能力的組件。它能持有組件&#xff08;如Activity或Fragment&#xff09;生命周期狀態的信息&#xff0c;并且允許其他觀察者監聽宿主的狀態。 二、基本原理 1、安卓10以下版本 隱形的Fragment注入在LifecycleOwner&am…

CSS 圓角邊框屬性(`border-radius`)筆記

一、作用&#xff1a; 用于設置元素四個角的圓角效果&#xff0c;讓元素不再死板&#xff0c;更加柔和。 二、基本語法&#xff1a; border-radius: 圓角大小; 單位&#xff1a;px&#xff08;像素&#xff09;或 %&#xff08;百分比&#xff09; 示例&#xff1a; div { ?…

python自助棋牌室管理系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

計算機——硬盤分區和格式化

硬盤驅動器 硬盤驅動器&#xff08;HDD&#xff09;是一種成熟、經濟的大容量存儲解決方案。它的核心優勢在于每GB成本低和超大容量。然而&#xff0c;其機械結構帶來的速度瓶頸、噪音、功耗和對物理沖擊的敏感性是其主要的缺點。隨著 SSD 價格的持續下降和性能的絕對領先&…

從IEC到UL:技術主權競爭下的斷路器合規性戰略

1 國際標準體系割裂的現狀 在全球低壓電器領域&#xff0c;國際標準體系呈現出日益明顯的割裂態勢。當前主要存在四大標準體系&#xff1a;國際通用的??IEC標準體系??、歐洲采用的??EN標準體系??、北美實施的??UL與CSA標準體系??&#xff0c;以及具有地域特色的?…

第十六屆藍橋杯_省賽B組(D).產值調整

題目如下 這道題看似很簡單&#xff0c;其實還是得觀察一下&#xff0c;要不然就會… 話不多說回到題目&#xff0c;這個題的坑就在于當A,B,C三個產值相同的時候&#xff0c;再怎么變還是之前的產值&#xff0c;或者也可以通過另外一種方法理解&#xff1a; 通過一個案例來舉…