国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 子樹刪除查詢後二元樹的高度

子樹刪除查詢後二元樹的高度

Nov 03, 2024 am 08:57 AM

2458。子樹刪除查詢後二元樹的高度

難度:

主題:陣列、樹、深度優(yōu)先搜尋、廣度優(yōu)先搜尋、二元樹

給定一個具有 n 個節(jié)點的 二元樹 的根。每個節(jié)點都被分配一個從 1 到 n 的唯一值。您還會獲得一個大小為 m 的陣列查詢。

您必須在樹上執(zhí)行 m 獨立 查詢,其中在第 ith 查詢中執(zhí)行以下操作:

  • 從樹中刪除以值為queries[i]的節(jié)點為根的子樹。 保證查詢[i]將等於根的值。

傳回大小為m的陣列答案,其中answer[i]是執(zhí)行第i查詢後樹的高度。

注意:

  • 查詢是獨立的,因此樹在每次查詢後都會回到其初始狀態(tài)。
  • 樹的高度是從根到樹中某個節(jié)點的最長簡單路徑的邊數(shù)。

範例1:

Height of Binary Tree After Subtree Removal Queries

  • 輸入: root = [1,3,4,2,null,6,5,null,null,null,null,null,7],查詢 = [4]
  • 輸出: [2]
  • 說明: 上圖顯示了刪除以值為 4 的節(jié)點為根的子樹後的樹。
    • 樹的高度為 2(路徑 1 -> 3 -> 2)。

範例2:

Height of Binary Tree After Subtree Removal Queries

  • 輸入: root = [5,8,9,2,1,3,7,4,6??],查詢 = [3,2,4,8]
  • 輸出: [3,2,3,2]
  • 說明:我們有以下疑問:
    • 刪除以值為 3 的節(jié)點為根的子樹。樹的高度變成 3(路徑 5 -> 8 -> 2 -> 4)。
    • 刪除以值為 2 的節(jié)點為根的子樹。樹的高度變成 2(路徑 5 -> 8 -> 1)。
    • 刪除以值為 4 的節(jié)點為根的子樹。樹的高度變成 3(路徑 5 -> 8 -> 2 -> 6)。
    • 刪除以值為 8 的節(jié)點為根的子樹。樹的高度變成 2(路徑 5 -> 9 -> 3)。

約束:

  • 樹中的節(jié)點數(shù)為n。
  • 2 5
  • 1
  • 樹中的所有值都是唯一。
  • m == requests.length
  • 1 4)
  • 1
  • 查詢[i] != root.val

提示:

  1. 嘗試預先計算從 1 到 n 的每個節(jié)點的答案,並在 O(1) 內回答每個查詢。
  2. 計算每個子樹的高度後,可以在單次樹遍歷中預先計算答案。

解:

此解決方案採用了兩遍方法:

  1. 計算樹中每個節(jié)點的高度。
  2. 刪除以每個查詢節(jié)點為根的子樹後,確定樹的最大高度。

讓我們用 PHP 實作這個解:2458。子樹刪除查詢後二元樹的高度

代碼分解

1。類別定義與屬性:

class Solution {

    private $valToMaxHeight = [];
    private $valToHeight = [];
  • valToMaxHeight:此陣列將儲存刪除每個節(jié)點的子樹後樹的最大高度。
  • valToHeight:此陣列將儲存每個節(jié)點子樹的高度。

2。主要功能:

function treeQueries($root, $queries) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
  • 函數(shù)treeQueries取得樹的根和查詢陣列。
  • 它首先呼叫 height 函數(shù)來計算每個節(jié)點的高度。
  • 然後,它呼叫 dfs(深度優(yōu)先搜尋)函數(shù)來計算子樹刪除後的最大高度。
  • 最後,它用每個查詢的結果填入答案陣列。

3。高度計算:

private function height($node) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
  • 此函數(shù)遞歸計算每個節(jié)點的高度。
  • 如果節(jié)點為空,則回傳0。
  • 如果節(jié)點的高度已經計算出來,它會從快取中檢索它(valToHeight)。
  • 根據(jù)左右子節(jié)點的高度計算高度,並將其儲存在 valToHeight 中。

4。深度優(yōu)先搜尋最大高度:

private function dfs($node, $depth, $maxHeight) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}
  • 此函數(shù)執(zhí)行 DFS 來計算刪除每個節(jié)點的子樹後樹的最大高度。
  • 它在 valToMaxHeight 中記錄目前節(jié)點的目前最大高度。
  • 它計算左右子樹的高度並相應地更新最大高度。
  • 它遞歸地呼叫自己的左右子節(jié)點,更新深度和最大高度。

範例演練

讓我們逐步看一下範例。

輸入範例:

// Tree Structure
//        1
//       / \
//      3   4
//     /   / \
//    2   6   5
//         \
//          7

$root = [1, 3, 4, 2, null, 6, 5, null, null, null, null, null, 7];
$queries = [4];

初始高度計算:

  • 樹根的高度為1:3
  • 樹根的高度為3:2
  • 以 4:2 為根的樹的高度(以 6 和 5 為根的子樹的高度)
  • 以 6:1 為根的樹的高度(僅節(jié)點 7)
  • 以2:0為根的樹的高度(葉節(jié)點)

高度計算後,valToHeight 將如下圖所示:

class Solution {

    private $valToMaxHeight = [];
    private $valToHeight = [];

最大的 DFS:

  • 對於根 (1),刪除子樹 4 個葉子:
    • 左高度:2(以 3 為根)
    • 右高:1(以 5 為根)
  • 因此,去掉 4 後的最大高度為 2。

查詢後結果陣列:

  • 對於查詢 4,結果將是 [2]。

最終輸出

所提供輸入的結果將是:

function treeQueries($root, $queries) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

這種結構化方法確保我們在初始預處理後有效地計算必要的高度並在恆定時間內回答每個查詢。整體複雜度為O(n m),其中n 是樹中的節(jié)點數(shù), m 是樹中的節(jié)點數(shù),

m

是查詢次數(shù)。

聯(lián)絡連結

如果您發(fā)現(xiàn)本系列有幫助,請考慮在 GitHub 上給

存儲庫

一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
  • 如果您想要更多類似的有用內容,請隨時關注我:
  • 領英
GitHub

以上是子樹刪除查詢後二元樹的高度的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設置PHP時區(qū)? 如何設置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

我如何驗證PHP中的用戶輸入以確保其符合某些標準? 我如何驗證PHP中的用戶輸入以確保其符合某些標準? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

編寫清潔和可維護的PHP代碼的最佳實踐是什麼? 編寫清潔和可維護的PHP代碼的最佳實踐是什麼? Jun 24, 2025 am 12:53 AM

寫乾淨、易維護的PHP代碼關鍵在於清晰命名、遵循標準、合理結構、善用註釋和可測試性。 1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統(tǒng)一代碼風格;3.按職責拆分代碼結構,使用MVC或Laravel式目錄組織;4.避免麵條式代碼,將邏輯拆分為單一職責的小函數(shù);5.在關鍵處添加註釋並撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測試性,採用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質量、協(xié)作效率和後期維護便利性。

什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什麼是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

如何將PHP代碼嵌入HTML文件中? 如何將PHP代碼嵌入HTML文件中? Jun 22, 2025 am 01:00 AM

可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴展名,以便服務器能正確解析。使用標準的標籤包裹PHP代碼,可在HTML中任意位置插入動態(tài)內容。此外,可在同一文件中多次切換PHP與HTML,實現(xiàn)條件渲染等動態(tài)功能。務必注意服務器配置及語法正確性,避免因短標籤、引號錯誤或遺漏結束標籤導致問題。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

See all articles