劍指offer32_二叉搜索樹的后序遍歷序列

二叉搜索樹的后序遍歷序列


輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。

如果是則返回true,否則返回false。

假設輸入的數組的任意兩個數字都互不相同。

數據范圍

數組長度 [ 0 , 1000 ] [0,1000] [0,1000]

樣例
輸入:[4, 8, 6, 12, 16, 14, 10]輸出:true

算法思路 :
  1. 基本思想

    • 利用后序遍歷特性:序列最后一個元素為根節點
    • 遞歸驗證左子樹所有節點 < 根節點 < 右子樹所有節點
  2. 驗證過程

    • 基準條件:當子序列長度 ≤ 1 時返回true
    • 劃分左右子樹
      1. 定位第一個≥根節點的元素作為分界點
      2. 驗證右子樹部分全部>根節點
    • 遞歸驗證
      • 左子樹區間[l, k-1]
      • 右子樹區間[k, r-1](排除末尾根節點)
  3. 實現特點

    • 使用類成員變量seq避免參數傳遞
    • 原地劃分不需要額外空間
復雜度類型分析結果說明
時間復雜度O(n2)最壞情況下(鏈式樹)需要n+(n-1)+…+1次比較
空間復雜度O(n)遞歸棧深度最大為樹高,最壞情況下(鏈式樹)為O(n)
  • 最優情況(平衡二叉樹):O(nlogn)
  • 最壞情況(單支樹):O(n2)
  • 平均情況:O(nlogn)
class Solution {
public:vector<int> seq;bool verifySequenceOfBST(vector<int> sequence) {seq = sequence;return dfs(0, sequence.size() - 1);}bool dfs(int l, int r){if(l >= r) return true;int root = seq[r];int k = l;while(k < r && seq[k] < root) k ++;for(int i = k + 1; i < r; i ++){if(seq[i] < root) return false;}return dfs(l, k - 1) && dfs(k, r - 1);}
};

算法優化方向 :

  1. 單調棧解法:可優化至O(n)時間復雜度
  2. 剪枝策略:當發現非法右子樹節點時立即終止遞歸
  3. 迭代實現:用棧替代遞歸可優化空間復雜度為O(1)(尾遞歸優化)

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

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

相關文章

《仿盒馬》app開發技術分享-- 訂單結合優惠券結算(端云一體)

技術棧 Appgallery connect 開發準備 上一節我們已經實現了優惠券的選擇&#xff0c;并且成功的把券后的價格也展示給用戶&#xff0c;不能使用的優惠券我們也用友好的方式告知用戶&#xff0c;這一節我們來實現優惠券內容的下一步&#xff0c;優惠券內容結合訂單進行結算提…

Python+Selenium+Pytest+POM自動化測試框架封裝

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 1、測試框架簡介 1&#xff09;測試框架的優點 代碼復用率高&#xff0c;如果不使用框架的話&#xff0c;代碼會顯得很冗余。可以組裝日志、報告、郵件等一些…

宋代大模型:智能重構下的文明再發現

引言&#xff1a;當汴京城遇見生成式AI 一幅動態的《清明上河圖》正通過全息投影技術演繹汴京城的市井百態。這個虛實交融的場景&#xff0c;恰似宋代大模型技術的隱喻——以人工智能為紐帶&#xff0c;連接起東京夢華的繁盛圖景與數字時代的文明重構。作為人工智能與歷史學交…

K-means++:讓K-means“聰明”地選擇初始中心點

大家好&#xff01;歡迎來到我的技術分享博客~ &#x1f44b; 在前兩篇博客中&#xff0c;我們深入探討了經典的 K-means 算法 以及它的優化方案 Canopy K-means。如果你還沒有看過&#xff0c;強烈建議先回顧一下&#xff0c;因為今天的主題 K-means 和它們有著千絲萬縷的聯系…

Langchain學習筆記(1)——如何調用Huggingface的模型并實現實時返回生成結果

Langchain支持很方便的OpenAI模型的調用&#xff0c;可以做到快速開發大模型應用。但是要使用Huggingface上的開源模型就沒有那么方便了&#xff0c;本文就詳細闡述如何用Langchain開發基于Huggingface上的模型&#xff0c;并實時返回生成結果。 實時返回生成結果是LLM很關鍵的…

Java安全-常規漏洞問題(SQL注入,XXE,SSRF,RCE)

靶場搭建 靶場下載 &#xff1a; https://github.com/whgojp/JavaSecLab這個靶場是使用Springboot搭建的所以不要下載 jar 文件運行&#xff0c;要使用IDEA運行他的文件夾 先打開pom 然后進行maven一下 改一下端口 配置完成之后修改一下 運行的模式 使用phpstudy搞一個sql數…

基于視頻的 AI 內存庫,極速語義檢索

簡介 在大模型應用里&#xff0c;將文本數據分塊嵌入存儲在向量數據庫已經是標準做法。然而&#xff0c;傳統向量數據庫雖然功能強大&#xff0c;但其高昂的RAM和存儲需求&#xff0c;以及復雜的部署運維&#xff0c;常常讓開發者望而卻步。今天&#xff0c;介紹一個名為 Memv…

接口適配器模式實現令牌桶算法和漏桶算法

以下是令牌桶算法、漏桶算法和雪花算法的清晰對比解析。它們屬于完全不同的技術領域&#xff0c;前兩者用于流量控制&#xff0c;后者用于分布式ID生成&#xff1a; 1. 令牌桶算法&#xff08;Token Bucket&#xff09; 領域&#xff1a;流量整形 / 速率限制核心目標&#xff…

618背后的電商邏輯重構:從價格血戰到價值共生

“今年終于沒做數學題。” 618進行到一半&#xff0c;行云已經買了很多&#xff0c;大件的有iPad、iWatch&#xff0c;小件的有運動鞋、面膜、紙巾。往年她要湊湊減減&#xff0c;經常要找個店鋪湊單&#xff0c;下完單再馬上退掉&#xff0c;今年她沒廢太多腦細胞&#xff0c…

解決 PyTorch 與 Python 3.12 的兼容性問題:`operator torchvision::nms does not exist` 深度解析

解決 PyTorch 與 Python 3.12 的兼容性問題 問題現象錯誤根源分析終極解決方案?? 推薦方案:創建 Python 3.11 虛擬環境? 備選方案:使用 PyTorch 夜間構建版(Python 3.12)驗證修復技術深度解析最佳實踐建議問題現象 當在 Python 3.12 環境中運行以下代碼時: from tran…

Git 實戰場景

四、標簽管理 4.1、標簽的理解 在使用 Git 進行版本管理時&#xff0c;**標簽&#xff08;Tag&#xff09;**扮演著非常重要的角色。它其實就是對某次提交&#xff08;commit&#xff09;的一個簡潔標識&#xff0c;相當于給這次提交起了一個可讀、易記的“別名”。比如&…

在同態加密系統中,參與角色以及各角色的功能作用流程圖,私鑰和公鑰分發流程,可能遇到的攻擊

一、角色劃分與職責 角色身份核心任務密鑰權限客戶端數據所有者 &#xff08;如醫院、用戶&#xff09;1. 加密原始數據 2. 上傳密文至服務器 3. 接收并解密結果&#xff08;可選&#xff09;持有公鑰服務器計算服務提供方 &#xff08;如云平臺&#xff09;1. 接收客戶端密文…

langchain從入門到精通(六)——LCEL 表達式與 Runnable 可運行協議

1. 多組件 invoke 嵌套的缺點 prompt ChatPromptTemplate.from_template("{query}") llm ChatOpenAI(model"gpt-3.5-turbo-16k") parser StrOutputParser() # 獲取輸出內容 content parser.invoke( llm.invoke( prompt.invoke( {"query": r…

ArcGIS中批量獲取輸入面圖層A中各要素的四至點的實現方法

一、背景及意義 在日常工作中&#xff0c;我們經常會需要獲取面圖層的四至點&#xff0c;我們能否在ArcGIS中直接獲取面圖層的四至點呢&#xff1f;答案是肯定的&#xff0c;請繼續往下看。 二、大體思路 使用字段計算器計算輸入面圖層A中各面要素的XY的最大值和最小值&…

大IPD之——華為的戰略本質與實踐(二)

華為戰略執行的能力如此強&#xff0c;有兩個核心原因&#xff1a;一是管理體系起了非常重大的作用&#xff1b;二是企業文化導致華為的執行力特別強。華為在戰略方面&#xff0c;為什么每次都能轉型成功&#xff1f;背后是有很多實質性的內容支撐的。而華為如何做戰略&#xf…

『大模型筆記』第3篇:多長的 Prompt 會阻塞其他請求?優化策略解析

『大模型筆記』多長的 Prompt 會阻塞其他請求?優化策略解析 文章目錄 一、更簡單的問題:長 Prompt 阻塞請求隊列1. 請求并行預填方案(Request-Parallel Prefills)二、根本的問題(Fundamental Flaw):Token 生成被并行預填拖慢1. 解耦預填(Disaggregated Prefill):以延遲優…

21 - GAM模塊

論文《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》 1、作用 這篇論文提出了全局注意力機制&#xff08;Global Attention Mechanism, GAM&#xff09;&#xff0c;旨在通過保留通道和空間方面的信息來增強跨維度交互&#xf…

Java01--使用IDEA編寫運行第一個Java程序HelloWorld

一.先新建一個文件夾存放項目(后續可以推送到Gitee) 二.創建項目 1.打開IDEA&#xff0c;點擊首頁的新建項目 2.新建空項目并命名&#xff0c;存放路徑為步驟一創建的文件夾&#xff1a; 3.在新項目中新建一個src文件夾&#xff08;用于集中管理文件&#xff09; 4.在src文件夾…

目標檢測相關【清晰易懂】

目標檢測相關 &#xff08;b&#xff09;是語義分割&#xff0c;&#xff08;c&#xff09;是實例分割 目標檢測 每個目標一個框標簽 實例分割 語義分割 識別每一個目標個體 目標檢測基礎上進一步提升模型能力有兩個方向&#xff1a;實例分割、旋轉目標檢測。 實例分割 …

強化學習 A2C算法

3.actor-critic方法 3.1 Reinforce 算法&#xff0c;也稱為蒙特卡洛策略梯度。蒙特卡洛方差 第一節介紹了DQN 在上一節基于策略的方法中&#xff0c;我們的目標是直接優化策略&#xff0c;而無需使用價值函數。更準確地說&#xff0c;Reinforce 是 基于策略的方法 的一個子類…