【LeetCode】二叉樹相關算法題

目錄

  • 1、二叉樹介紹
    • 【1】核心概念
    • 【2】關鍵特性
  • 2、算法題
    • 【1】二叉樹的前序遍歷
    • 【2】二叉樹的后序遍歷

1、二叉樹介紹

【1】核心概念

結構含義
節點結構二叉樹由節點組成, 每個節點包含一個數據元素和最多兩個子節點:左子節點和右子節點
根節點樹的頂部節點稱為根節點,是訪問整個樹的起點
葉節點沒有子節點的節點成為葉節點
子樹每個節點及其后代構成一個子樹

【2】關鍵特性

特性含義
最大子節點數每個節點最多有兩個子節點
遍歷方式前序遍歷(根-左-右)
中序遍歷(左-根-右)
后序遍歷(左-右-根)
層次遍歷(按層從做到右)
常見類型二叉搜索樹(BST):左子樹所有節點值小于根節點,右子樹所有節點值大于根節點,用于高效搜索
平衡二叉樹(AVL樹):自動保持樹的高度平衡,確保操作效率
堆:用于優先隊列,如最大堆和最小堆

2、算法題

【1】二叉樹的前序遍歷

LeetCode第144題,題目如下:

給你二叉樹的根節點 root ,返回它節點值的 前序 遍歷。

示例 1:

輸入:root = [1,null,2,3]
輸出:[1,2,3]

示例 2:

輸入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
輸出:[1,2,4,5,6,7,3,8,9]

示例 3:

輸入:root = []
輸出:[]

示例 4:

輸入:root = [1]
輸出:[1]

提示:

樹中節點數目在范圍 [0, 100] 內
-100 <= Node.val <= 100

代碼示例:

type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}//遞歸解法
func preorderTraversal(root *TreeNode) []int {//結果數組result := make([]int, 0)//定義遞歸函數var traversal func(node *TreeNode)traversal = func(node *TreeNode) {if node == nil { //空節點直接退出return}//前序遍歷:根->左->右//訪問根節點result = append(result, node.Val)//遞歸左子樹traversal(node.Left)//遞歸右子樹traversal(node.Right)}//從根節點開始遍歷traversal(root)return result
}

【2】二叉樹的后序遍歷

LeetCode第145題,題目如下:

給你一棵二叉樹的根節點 root ,返回其節點值的 后序遍歷 。

示例 1:

輸入:root = [1,null,2,3]
輸出:[3,2,1]

示例 2:

輸入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
輸出:[4,6,7,5,2,9,8,3,1]

示例 3:

輸入:root = []
輸出:[]

示例 4:

輸入:root = [1]
輸出:[1]

提示:

樹中節點的數目在范圍 [0, 100] 內
-100 <= Node.val <= 100

代碼示例:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func postorderTraversal(root *TreeNode) []int {//遞歸終止條件:空節點返回空切片if root == nil {return []int{}}//遞歸遍歷左子樹left := postorderTraversal(root.Left)//遞歸便利右子樹right := postorderTraversal(root.Right)//合并結果//先拼接左右子樹結果result := append(left, right...)//最后添加當前節點值result = append(result, root.Val)return result
}

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

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

相關文章

Vulnhub Deathnote靶機復現攻略

一、靶機安裝 下載地址&#xff1a;https://download.vulnhub.com/deathnote/Deathnote.ova 下載好后使用VB打開&#xff0c;配置如下 二、主機發現 使用相同連接方式的kali進行后續操作(172.16.2.7)根據mac地址進行確認。 nmap -sn 172.16.2.1/24 三、端口掃描 端口開放了…

DevEco Studio 6.0.0 元服務頁面跳轉失敗

背景&#xff0c;我使用最新的編輯器DevEco Studio 6.0.0&#xff0c;編寫一個元服務&#xff0c;發現使用跳轉頁面的時候失敗了&#xff01;然后查看官方文檔&#xff0c;兩種方式都測試了&#xff0c;發現都不行。 方法1&#xff1a;Navigation路由跳轉無效&#xff0c;見官方…

docker重啟或系統重啟后harbor自動啟動

docker重啟或系統重啟后harbor自動啟動docker重啟或系統重啟后harbor自動啟動方法 1&#xff1a;在 docker-compose.yml 中配置重啟策略&#xff08;推薦&#xff09;方法 2&#xff1a;創建 Systemd 服務&#xff08;更可靠&#xff09;方法 3&#xff1a;使用 Docker 的 Rest…

OpenZeppelin Contracts 架構分層分析

OpenZeppelin Contracts 是一個面向以太坊&#xff08;及兼容 EVM 的區塊鏈&#xff09;生態系統的??模塊化、安全性優先、標準兼容的智能合約庫??。其內部代碼按照功能職責與抽象層級&#xff0c;可系統性地劃分為多個邏輯層次。理解這些層次及其依賴關系&#xff0c;對于…

Java-JVM的內存模型

一.JVM內存模型JVM內存模型可以從進程生命周期和線程生命周期1.線程生命周期每個線程都會有自己各自一份數據&#xff0c;不會存在線程安全問題1.程序計數器指示當前線程執行的字節碼指令的行號&#xff0c;以便線程執行時可以回到正確的位置2.虛擬機棧線程私有的&#xff0c;與…

Highcharts Dashboards | 打造企業級數據儀表板:從圖表到數據駕駛艙

企業日常決策、產品運營、業務監控&#xff0c;越來越依賴數據驅動。而儀表板&#xff08;Dashboard&#xff09;作為匯總展示多維度信息的“數據駕駛艙”&#xff0c;已成為企業可視化的核心場景之一。如果你正在尋找一款能夠快速、靈活、安全構建儀表板的前端圖表工具&#x…

基于Java的Markdown轉Word工具(標題、段落、表格、Echarts圖等)

項目源于我們開發的一款基于大模型的報告生成工具。由于需要將 Markdown 格式的內容導出為 Word 文檔&#xff0c;而市面上缺乏合適的現成工具&#xff0c;所以決定自己開發一個Markdown轉Word的工具。 &#x1fa77;源碼地址&#xff1a;daydayup-zyn/md2doc-plus &#x1f…

Unity:PlayerPrefs筆記

寫在前面&#xff1a;寫本系列(自用)的目的是回顧已經學過的知識、記錄新學習的知識或是記錄心得理解&#xff0c;方便自己以后快速復習&#xff0c;減少遺忘。一、PlayerPrefs的基本方法1、存儲相關PlayerPrefs的數據存儲類似于鍵值對存儲&#xff0c;一個鍵對應一個值。Unity…

SQL tutorials

SQL Literature SQL運行在資料庫管理系統&#xff08;Database Management System&#xff09;&#xff0c;如MySQL&#xff0c;Postgre SQL&#xff0c;Microsoft SQL Server&#xff0c; Oracle&#xff0c;etc。 SQL練習平臺&#xff1a;https://sqliteviz.com/ EXAMPLE SQL…

MySQL快速恢復數據的N種方案完全教程

目錄 1. 理解MySQL數據恢復的核心邏輯 1.1 數據丟失的常見場景 1.2 MySQL的“救命稻草”:關鍵文件和機制 2. 方案一:利用全量備份+binlog實現點對點恢復 2.1 準備工作 2.2 恢復步驟 2.3 實戰案例 3. 方案二:利用InnoDB的崩潰恢復機制 3.1 崩潰恢復的原理 3.2 恢復步…

雙屏加固筆記本電腦C156-2:堅固與高效的完美融合

在當今數字化時代&#xff0c;筆記本電腦已成為人們工作和生活中不可或缺的工具。然而&#xff0c;對于一些特殊行業和惡劣環境下的應用場景&#xff0c;普通筆記本電腦往往難以滿足需求。此時&#xff0c;具備堅固耐用、高性能等特點的加固筆記本電腦應運而生。魯成偉業的雙屏…

Jenkins 環境部署

下載相關軟件&#xff1a;Jenkins 的安裝和設置 相關工具&#xff1a; Git : Git - Downloads java 17: Java Archive Downloads - Java SE 17.0.12 and earlier python : Download Python | Python.org jenkins、jenkins.war : Jenkins 的安裝和設置 將所有軟件安裝后&am…

如何高效解決 Java 內存泄漏問題方法論

目錄 一、系統化的診斷與優化方法論 二、獲取內存快照:內存泄漏的第一步 (一)自動生成 Heap Dump (二)手動生成 Heap Dump 三、導入分析工具:MAT 和 JProfiler (一)MAT (Memory Analyzer Tool) (二)JProfiler (三)自身企業工具 四、深入分析:逐步排查內存…

HarmonyOS Camera Kit 全解析:從基礎拍攝到跨設備協同的實戰指南

在移動應用開發中&#xff0c;相機功能往往是提升用戶體驗的關鍵模塊&#xff0c;但傳統相機開發面臨權限管理復雜、設備兼容性差、功能實現繁瑣等痛點。HarmonyOS 作為面向全場景的分布式操作系統&#xff0c;其 Camera Kit&#xff08;相機服務&#xff09;通過統一的 API 接…

運用詞向量模型分辨評論

代碼實現&#xff1a;import jieba import pandas as pd hp pd.read_table(優質評價.txt,encodinggbk) cp pd.read_table(差評1.txt,encodinggbk) cp_segments [] contents cp.content.values.tolist() for content in contents:results jieba.lcut(content)if len(result…

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享

基于Apache Flink的實時數據處理架構設計與高可用性實戰經驗分享 一、業務場景描述 在現代電商平臺中&#xff0c;實時用戶行為數據&#xff08;點擊、瀏覽、購物車操作等&#xff09;對業務決策、個性化推薦和風控都至關重要。我們需要搭建一個高吞吐、低延遲且具備高可用性的…

第二十四天:虛函數與純虛函數

虛函數&#xff08;Virtual Function&#xff09; 定義&#xff1a;在基類中使用 virtual 關鍵字聲明的成員函數&#xff0c;允許在派生類中被重新定義&#xff08;覆蓋&#xff0c;override&#xff09;。其目的是實現多態性&#xff0c;即通過基類指針或引用調用函數時&#…

uniapp微信小程序-登錄頁面驗證碼的實現(springboot+vue前后端分離)EasyCaptcha驗證碼 超詳細

一、項目技術棧登錄頁面暫時涉及到的技術棧如下:前端 Vue2 Element UI Axios&#xff0c;后端 Spring Boot 2 MyBatis MySQL Redis EasyCaptcha JWT Maven后端使用IntelliJ IDEA 2024.3.5 前端使用 HBuilder X 和 微信開發者工具二、實現功能及效果圖過期管理驗證碼有…

【Java】HashMap的詳細介紹

目錄 一.HashMap 1.基本概念 2.底層數據結構&#xff1a; 3.HashCode和equals方法 為什么重寫HashCode方法&#xff1f; 為什么重新equals方法&#xff1f; 4.put操作 1.初始化和數組檢查 2.計算索引并檢查桶是否為空 3.桶不為null&#xff0c;處理哈希沖突 4.判斷鏈…

nifi 增量處理組件

在Apache NiFi中&#xff0c;QueryDatabaseTable 是一個常用的處理器&#xff0c;主要用于從關系型數據庫表中增量查詢數據&#xff0c;特別適合需要定期抽取新增或更新數據的場景&#xff08;如數據同步、ETL流程&#xff09;。它的核心功能是通過跟蹤指定列的最大值&#xff…