可視化圖解算法33:判斷是不是平衡二叉樹

1. 題目

描述

輸入一棵節點數為 n 的二叉樹,判斷該二叉樹是否是平衡二叉樹。

在這里,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹

平衡二叉樹(Balanced Binary Tree),具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。

樣例解釋:

樣例二叉樹如圖,為一顆平衡二叉樹

注:我們約定空樹是平衡二叉樹。

數據范圍:n≤100,樹上節點的val值滿足 0 ≤n≤1000

要求:空間復雜度O(1),時間復雜度 O(n)

輸入描述:

輸入一棵二叉樹的根節點

返回值描述:

輸出一個布爾類型的值

示例1

輸入:

{1,2,3,4,5,6,7}

返回值:

true

示例2

輸入:

{}

返回值:

true

2. 解題思路

先來看平衡二叉樹的性質:

平衡二叉樹(Balanced Binary Tree),具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。

因此可以借助二叉樹的高度來判斷是否為平衡二叉樹。整體思路為:先計算左右子樹的高度,再比較左右子樹的高度差(如果高度差大于1,則不是平衡二叉樹)。

①對每一個節點的左右子樹進行比較;②如果左子樹不是平衡二叉樹,就沒有必要對右子樹進行是否平衡的判斷;③采用遞歸的方式對左右子樹進行判斷。

由于要采用遞歸來實現平衡二叉樹的判斷,因此需要驗證是否滿足遞歸的兩個條件:

可以看出,求解二叉樹平衡性的判斷滿足遞歸的兩個條件,因此可以采用遞歸的方法來求解。由于平衡性的判斷依賴于二叉樹的高度,二叉樹的高度求解參考前序文章《可視化圖解算法25:二叉樹的最大深度(高度)》,二叉樹高度求解對應的遞推公式如下:

接下來就可以依據二叉樹的高度進行平衡性的判斷,先求解二叉樹的左右子樹的高度,再判斷左右子樹高度差是否超過1,如果超過1則不是平衡二叉樹。

如果文字描述的不太清楚,你可以參考視頻的詳細講解。

  • Python編碼:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1372113

  • Java編碼:數據結構筆試面試算法-Java語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Java語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1367352

  • Golang編碼:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364777

3. 編碼實現

核心代碼如下:

/**
* 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可
*
*
* @param pRoot TreeNode類* @return bool布爾型
*/
func IsBalanced_Solution(pRoot *TreeNode) bool {// write code heretreeDepth(pRoot)return isBalanced
}var isBalanced = truefunc treeDepth(root *TreeNode) int {// 2. 遞歸終止條件if root == nil {return 0}// 1. 問題分解// 1.1 求解左子樹的高度l := treeDepth(root.Left)// 1.2 求解右子樹的高度r := treeDepth(root.Right)if math.Abs(float64(l-r)) > 1 {isBalanced = false // 不是平衡樹,更改全局變量return -1          // 加一個標記-1,已經不可能是平衡樹了(減少遞歸計算次數),直接返回}// 1.3 求解當前樹的高度dep := math.Max(float64(l), float64(r)) + 1return int(dep)
}

具體完整代碼你可以參考下面視頻的詳細講解。

  • Python編碼:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1372113

  • Java編碼:數據結構筆試面試算法-Java語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Java語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1367352

  • Golang編碼:數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1364777

4.小結

二叉樹平衡性的判斷,可以通過二叉樹的高度來完成,即先求解二叉樹的左右子樹的高度,再判斷左右子樹高度差是否超過1,如果超過1則不是平衡二叉樹。

《數據結構與算法》深度精講課程正式上線啦!七大核心算法模塊全解析:

? ? ? 鏈表

? ? ? 二叉樹

? ? ? 二分查找、排序

? ? ? 堆、棧、隊列

? ? ? 回溯算法

? ? ? 哈希算法

? ? ? 動態規劃

無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!

  • Python編碼實現:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ss897667807

  • Java編碼實現:數據結構筆試面試算法-Java語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Java語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ss161443488

  • Golang編碼實現:數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ss63997

對于二叉樹的相關算法,我們總結了一套【可視化+圖解】方法,依據此方法來解決相關問題,算法變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。

今日佳句:長風破浪會有時,直掛云帆濟滄海。

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

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

相關文章

【Linux網絡】應用層自定義協議與序列化

應用層自定義協議與序列化 應用層 我們程序員寫的一個個解決我們實際問題,滿足我們日常需求的網絡程序,都是在應用層. 協議是一種"約定".Socket的接口,在讀寫數據時,都是按"字符串"的方式來發送接收的.如果我們要傳輸一些"結構化的數據"怎么辦…

MySQL + Elasticsearch:為什么要使用ES,使用場景與架構設計詳解

MySQL Elasticsearch:為什么要使用ES,使用場景與架構設計詳解 前言一、MySQL Elasticsearch的背景與需求1.1 為什么要使用Elasticsearch(ES)?1.2 為什么MySQL在某些場景下不足以滿足需求?1.3 MySQL Elas…

PPL困惑度的計算

1. 公式 PPL(Perplexity)困惑度 是自然語言處理(NLP)中常用的評估語言模型(Language Model)性能的指標。PPL 用于衡量語言模型對語言序列的預測能力,數值越小,說明模型的預測能力越…

MegaCLI Raid管理工具

整理在CentOS 7.9和Ubuntu 24.04上,MegaCLI 工具的安裝與常用命令。 1. 參考 下載和安裝MegaCLI工具 MegaCli RAID管理工具 Megacli 批量磁盤巡檢 ubuntu24.04 No such file libncursesw.so.5 dell服務器硬盤的狀態變成外來(foreign)命…

HTML9:頁面結構分析

頁面結構分析 元素名描述header標題頭部區域的內容(用于頁面或頁面中的一塊區域)footer標記腳部區域的內容(用于整個頁面或頁面的一塊區域)sectionWeb頁面的一塊獨立區域article獨立的文章內容aside相關的內容或應用(…

分布式處理架構

分布式處理架構是一種將計算任務分散到多臺計算機或服務器上協同完成的系統設計方法。這種架構通過將工作負載分配到多個節點(可以是物理機、虛擬機或容器)來提高性能、可靠性和可擴展性。下面我將從多個角度詳細解釋這一概念: 分布式架構的…

算法每日一題 | 入門-分支結構-Apples Prologue/蘋果和蟲子

Apples Prologue/蘋果和蟲子 題目描述 小 B 喜歡吃蘋果。她現在有 m m m(1 ≤ m ≤100)個蘋果,吃完一個蘋果需要花費 t t t(0 ≤ t≤ 100)分鐘,吃完一個后立刻開始吃下一個。 現在時間過去了 s s s&a…

RT Thread Studio創建軟件和硬件RTC工程

MCU型號:STM32F103RET6 一.配置軟件模擬RTC 1.生成一個帶串口輸出的工程文件,新建RT-Thread項目工程文件。 2.查看電路圖中的串口輸出管腳,根據STMCubeMx軟件可知此串口為USART1,選擇芯片型號為STM32F103RET6,控制臺…

STC32G12K128-旋轉編碼器-軟件去抖

STC32G12K128-旋轉編碼器-軟件去抖 簡介代碼 簡介 EC11旋轉編碼器是一種可以連續旋轉的器件A,B,C為旋轉編碼引腳,帶按鍵的有D,E引腳。引腳功能: A:編碼器A相;B:編碼器B相;C:公共端-一般接到GN…

配置Jupyter Notebook環境及Token認證(Linux服務器)

配置Jupyter Notebook環境及Token認證(Linux服務器) 背景 在Ubuntu 18.04.6 LTS服務器(IP: 39.105.167.2)上,基于虛擬環境pytorch_env,通過Mac終端(SSH)配置Jupyter Notebook環境&…

從零開始學Flink:開啟實時計算的魔法之旅

在凌晨三點的數據監控大屏前,某電商平臺的技術負責人突然發現一個異常波動:支付成功率驟降15%。傳統的數據倉庫此時還在沉睡,而基于Flink搭建的實時風控系統早已捕捉到這個信號,自動觸發預警機制。當運維團隊趕到時,系…

基于k8s的Jenkins CI/CD平臺部署實踐(三):集成ArgoCD實現持續部署

基于k8s的Jenkins CI/CD平臺部署實踐(三):集成ArgoCD實現持續部署 文章目錄 基于k8s的Jenkins CI/CD平臺部署實踐(三):集成ArgoCD實現持續部署一、Argocd簡介二、安裝Helm三、Helm安裝ArgoCD實戰1. 添加Arg…

[C++類和對象]類和對象的引入

面向過程和面向對象 C語言是面向過程的,關注的是過程,分析出求解問題的步驟,通過函數調用來逐步解決問題 C是基于面向對象的,關注的是對象,將一件事情分成不同的對象,靠對象之間完成交互 類的引入 C語言結構體中只能定義變量,在C中,結構體不僅僅可以定義變量,而且可以定義函…

AWS之存儲服務

目錄 一、傳統存儲術語 二、傳統存儲與云存儲的關系 三、云存儲之AWS 使用場景 文件存儲 數據塊存儲 對象存儲 EBS、EFS、S3對比 EBS塊存儲 S3對象存儲 S3 使用案例 S3 存儲類 EFS文件存儲 一、傳統存儲術語 分類 接口/技術類型 應用場景特點 關系及區別 機械硬…

WPDRRC 模型:構建動態閉環的信息安全防御體系

WPDRRC 模型是一種信息安全整體架構設計模型,由預警(Warning)、保護(Protection)、檢測(Detection)、反應(Reaction)、恢復(Recovery)和反擊&…

Redis 數據類型詳解(二):Hash 類型全解析

文章目錄 一、什么是 Redis 的 Hash 類型?二、Hash為什么在有些時候比String好用三、常見命令1.HSET key field value2.HGET key field3.HMSET4.HMGET5.HGETALL6.HKEYS7.HVALS8.HINCRBY9.HSETNX 四、應用場景五、性能優勢六、注意事項總結 提示:以下是本…

Go Modules 的基本使用

在 Go Modules 項目中,首次運行時下載依賴包的正確流程需要根據項目情況區分處理。以下是詳細步驟和最佳實踐: 一、首次初始化項目的標準流程 1.1 創建項目目錄并初始化模塊 mkdir myproject && cd myproject go mod init github…

RISC-V AIA SPEC學習(五)

第六章 Interrupts for Virtual Machines(VS Level) 核心內容 1.VS級別外部中斷支持:?? ??客戶中斷文件(Guest Interrupt File)??:虛擬機的每個vCPU擁有獨立的IMSIC中斷文件,允許直接接收設備MSI。??vstopi CSR??:類似stopei,用于虛擬機內部處理最高優先級中…

【Python-Day 11】列表入門:Python 中最靈活的數據容器 (創建、索引、切片)

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

【AXI總線專題】-AXI-LITE總線解讀

【AXI總線專題】-AXI-LITE總線解讀 1.axi-lite概述2.信號定義Write address channelWrite data channelWrite response channelRead address channelRead data channel 3.測試4.仿真波形5.工程文件 參考手冊 《3-2-03米聯客2022版AXI4總線專題-20211123.pdf》 《IHI0022E_amba_…