【數據結構】二叉樹篇| 綱領思路01+刷題

在這里插入圖片描述

  • 博主簡介:努力學習的22級計算機科學與技術本科生一枚🌸
  • 博主主頁: @是瑤瑤子啦
  • 每日一言🌼: 所謂自由,不是隨心所欲,而是自我主宰。——康德

目錄

  • 一、二叉樹刷題綱領
  • 二、刷題
    • 1、104. 二叉樹的最大深度
    • 2、 二叉樹的前序遍歷(非遞歸)
    • 3、 二叉樹的直徑

一、二叉樹刷題綱領

  • 🍊 二叉樹解題的思維模式分兩類:

    • 1、是否可以通過遍歷一遍二叉樹得到答案?如果可以,用一個 traverse 函數配合外部變量來實現,這叫「遍歷」的思維模式。(對應:回溯算法)
    void traverse(TreeNode root) {if (root == null) {return;}// 前序位置traverse(root.left);// 中序位置traverse(root.right);// 后序位置
    }
    • 2、是否可以定義一個遞歸函數,通過子問題(子樹)的答案推導出原問題的答案?如果可以,寫出這個遞歸函數的定義,并充分利用這個函數的返回值,這叫「分解問題」的思維模式。(對應:動態規劃算法)
  • 🍊 前中后序

    • 所謂前序位置,就是剛進入一個節點(元素)的時候,后序位置就是即將離開一個節點(元素)的時候,那么進一步,你把代碼寫在不同位置,代碼執行的時機也不同
    • 前序位置的代碼只能從函數參數中獲取父節點傳遞來的數據,而后序位置的代碼不僅可以獲取參數數據,還可以獲取到子樹通過函數返回值傳遞回來的數據。
    • 🌟二叉樹的所有問題,就是讓你在前中后序位置注入巧妙的代碼邏輯,去達到自己的目的,你只需要單獨思考每一個節點應該做什么,其他的不用你管,拋給二叉樹遍歷框架,遞歸會在所有節點上做相同的操作。

    在這里插入圖片描述
    在這里插入圖片描述

  • 🍊一道二叉樹的題目時的通用思考過程

    1. 是否可以通過遍歷一遍二叉樹得到答案?如果可以,用一個 traverse 函數配合外部變量來實現。

    2. 是否可以定義一個遞歸函數,通過子問題(子樹)的答案推導出原問題的答案?如果可以,寫出這個遞歸函數的定義,并充分利用這個函數的返回值。

    3. 無論使用哪一種思維模式,你都要明白二叉樹的每一個節點需要做什么,需要在什么時候(前中后序)做。

二、刷題

1、104. 二叉樹的最大深度

🔗104. 二叉樹的最大深度
在這里插入圖片描述

  • 👧🏻思路:分解成子問題,maxDepth = 1 + 左子樹最大高度+右子樹最大高度

  • 🙇🏻?♀?代碼:

     public int maxDepth(TreeNode root) {//臨界條件if(root == null){return 0;}int leftHeight = maxDepth(root.left);//求左子樹最大高度int rightHeight = maxDepth(root.right);//求右子樹最大高度return 1 + Math.max(leftHeight, rightHeight);}
    

2、 二叉樹的前序遍歷(非遞歸)

🔗144. 二叉樹的前序遍歷
在這里插入圖片描述

  • 👧🏻思路:分解成子問題,遞歸序列 = add(自身節點)+ add(左子樹的遞歸序列) + add(右子樹的遞歸序列)

  • 🙇🏻?♀?代碼:

     public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ret = new LinkedList<>();if(root == null){return ret;}ret.add(root.val);if(root.left!=null){List<Integer> leftList = preorderTraversal(root.left);ret.addAll(leftList);}if(root.right!=null){List<Integer> rightList = preorderTraversal(root.right);ret.addAll(rightList);}return ret;}
    

3、 二叉樹的直徑

🔗543. 二叉樹的直徑
在這里插入圖片描述

  • 👧🏻思路:兩種模式的結合,首先大的背景是利用maxDepth進行二叉樹的后序遍歷+求當前節點左右子樹的最大高度.注意需要一個外部變量maxDiameter來時刻更新最大直徑。(這種思路是O(n)的時間復雜度,可以用遍歷每個節點+求當前節點的最大直徑,思路是一樣的,但是復雜度度是O(n2),因為在本方法中在求maxDepth的時候就已經順帶遍歷了整個節點!)
    在這里插入圖片描述

  • 🙇🏻?♀?代碼:

    	public int maxDiameter;public int diameterOfBinaryTree(TreeNode root) {maxDepth(root);return maxDiameter;}public int maxDepth(TreeNode root) {if(root == null){return 0;}//計算當前節點的左子樹最大高度int leftH = maxDepth(root.left);//計算當前節點的右子樹的最大高度int rightH = maxDepth(root.right);maxDiameter = Math.max(maxDiameter,leftH + rightH);//更新maxDiameterreturn 1 + Math.max(leftH, rightH);}
    

💐若有不懂的地方,歡迎隨時在評論區or私信找瑤瑤子交流討論🌺

在這里插入圖片描述

  • Java島冒險記【從小白到大佬之路】

  • LeetCode每日一題–進擊大廠

  • Go語言核心編程

  • 算法

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

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

相關文章

react進階

react-virtualized的高階組件&#xff0c;Autosize可以使屏幕適配。使用render-props模式來獲取到AutoSizer組件暴露的width和height屬性。JSON.parse(JSON.stringify())不適用于有undefined的數據。 深拷貝的使用&#xff0c;不能使用在有undefined的數據中。有直接過濾undefi…

jacoco功能測試-代碼覆蓋率

1、下載 jacoco 官網地址&#xff1a;EclEmma - JaCoCo Java Code Coverage Library 2、拷貝 jar 包 下載好后&#xff0c;找到這兩個文件&#xff0c;然后找到被測項目 3、啟動 jacocoagent&#xff0c;監控被測項目 java -javaagent:jacocoagent.jarincludes*,outputtcp…

【Java】異常處理 之 使用Log4j

使用 Log4j 前面介紹了Commons Logging&#xff0c;可以作為“日志接口”來使用。而真正的“日志實現”可以使用Log4j。 Log4j是一種非常流行的日志框架&#xff0c;最新版本是2.x。 Log4j是一個組件化設計的日志系統&#xff0c;它的架構大致如下&#xff1a; log.info(&q…

linux0.95(VFS重點)源碼通俗解讀(施工中)

文件系統在磁盤中的體現 下面是磁盤的內容&#xff0c;其中i節點就是一個inode數組&#xff0c;邏輯塊就是數據塊可用于存放數據 操作系統通過將磁盤數據讀入到內存中指定的緩沖區塊來與磁盤交互&#xff0c;對內存中的緩沖區塊修改后寫回磁盤。 進程(task_struct * task[N…

Mysql中如果建立了索引,索引所占的空間隨著數據量增長而變大,這樣無論寫入還是查詢,性能都會有所下降,怎么處理?

索引所占空間的增長確實會對MySQL數據庫的寫入性能和查詢性能造成影響&#xff0c;這主要是由于索引數據過多時會導致磁盤I/O操作變得非常頻繁&#xff0c;從而使性能下降。為此&#xff0c;可以采取以下幾種方式來減緩這種影響&#xff1a; 1. 限制索引的大小&#xff1a;可以…

Netty框架技術文檔-基本概念

Netty: Home https://github.com/netty/netty 基本概念 NIO&#xff08;Non-blocking I/O&#xff0c;非阻塞I/O&#xff09;&#xff1a;NIO是一種Java平臺的I/O模型&#xff0c;它使用Channel和Buffer來進行數據傳輸&#xff0c;而不是傳統的Stream。NIO模型可以處理大量并…

TCP除了3次握手,其他的這些你知道嗎?

文章首發地址 MSS&#xff1a; MSS&#xff08;Maximum Segment Size&#xff09;表示TCP報文段的最大長度&#xff0c;通常是MSSMTU-TCP頭部長度。由于數據鏈路層協議的MTU可能不同&#xff0c;因此TCP連接建立時會通過MSS選項告知對方報文段的最大長度。MTU&#xff1a; MTU…

【探索SpringCloud】服務發現-Nacos使用

前言 在聊服務注冊中心時&#xff0c;便提到了Nacos。這次便來認識一下。當然&#xff0c;這自然沒有官方介紹那般詳盡&#xff0c;權當是學習了解Nacos原理的一個過程吧。 Nacos簡介 Nacos&#xff0c;全名&#xff1a;dynamic Naming And Configuration Service. 而這個名…

Java JDBC,輕松構建數據庫連接:代碼教程詳解

JDBC的概述 Java Database Connectivity&#xff08;JDBC&#xff09;是 Java 中用于與數據庫進行通信的 API。它提供了一套標準的 API&#xff0c;并允許 Java 應用程序連接到各種關系型數據庫&#xff0c;如 MySQL、Oracle、PostgreSQL 等&#xff0c;從而可以執行 SQL 查詢…

win10在vmware15中安裝macos10.13系統

第一步、安裝vmware版本信息如下 第二步、下載unlocker-main和darwin.iso放到安裝文件夾 第三步、管理員身份運行win-install.cmd 第四步、運行vmware新建虛擬機 第五步、啟動新創建的虛擬機macOS 10.13并選擇語言 第六步、選擇磁盤工具抹掉磁盤 第七步、格式化完成后退出磁盤工…

flutter 隨筆

萬物 皆可 結構 概念 ?狀態 插件類 flutter系統類 MaterialApp源App應? 事件 很簡單/簡單/較復雜/復雜/很復雜 結構體 MaterialApp(xx:) 公開坑位屬性&#xff1a;所配置內容 Widget 插件事件 function 函數事件 flutter/dart 事件結構描述void Function() 外層主事件 內層回…

數據結構:交換排序

冒泡排序 起泡排序&#xff0c;別名“冒泡排序”&#xff0c;該算法的核心思想是將無序表中的所有記錄&#xff0c;通過兩兩比較關鍵字&#xff0c;得出升序序列或者降序序列。 算法步驟 比較相鄰的元素。如果第一個元素大于第二個元素&#xff0c;就交換它們。對每一對相鄰…

Python-OpenCV中的圖像處理-圖像金字塔

Python-OpenCV中的圖像處理-圖像金字塔 圖像金字塔高斯金字塔拉普拉斯金字塔 金字塔圖像融合 圖像金字塔 同一圖像的不同分辨率的子圖集合&#xff0c;如果把最大的圖像放在底部&#xff0c;最小的放在頂部&#xff0c;看起來像一座金字塔&#xff0c;故而得名圖像金字塔。cv2…

小程序發布注意事項

1、使用HBuildx的 發布 功能發布小程序&#xff0c;因為編譯完的代碼目錄不是同一個 如果使用 運行 到小程序&#xff0c;最后發布的版本會顯示”無法連接本地服務器“ 2、使用unicloud的云服務 uniCloud發行 | uni-app官網 阿里云的unicloud的話&#xff0c;使用request域名…

Spring中Bean的循環依賴問題

1.什么是Bean的循環依賴&#xff1f; 簡單來說就是在A類中&#xff0c;初始化A時需要用到B對象&#xff0c;而在B類中&#xff0c;初始化B時需要用到A對象&#xff0c;這種狀況下在Spring中&#xff0c;如果A和B同時初始化&#xff0c;A&#xff0c;B同時都需要對方的資源&…

電腦開機出現Boot Device怎么辦?

開機出現Boot Device這個問題很常見&#xff0c;有時還會出現No Boot Device的問題&#xff0c;雖然多了一個單詞&#xff0c;但意思是相同的&#xff0c;這些問題說明你的系統盤出現了問題&#xff0c;或者是引導出現了問題。這該如何解決呢&#xff1f; 方法1. 檢查主板或硬盤…

【算法——雙指針】LeetCode 283 移動零

題目描述&#xff1a; 思路&#xff1a; (雙指針) O(n)O(n)O(n) 給定一個數組 nums&#xff0c;要求我們將所有的 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 如圖所示&#xff0c;數組nums [0,1,0,3,12]&#xff0c;移動完成后變成nums [1,3,12,0,0] &am…

若依vue -【 100 ~ 更 ~ 110 】

100 主子表代碼生成詳解 1 新建數據庫表結構&#xff08;主子表&#xff09; -- ---------------------------- -- 客戶表 -- ---------------------------- drop table if exists sys_customer; create table sys_customer (customer_id bigint(20) not null…

Docker部署rabbitmq遇到的問題 Stats in management UI are disabled on this node

1. Stats in management UI are disabled on this node #進入rabbitmq容器 docker exec -it {rabbitmq容器名稱或者id} /bin/bash#進入容器后&#xff0c;cd到以下路徑 cd /etc/rabbitmq/conf.d/#修改 management_agent.disable_metrics_collector false echo management_age…

談談語音助手

目錄 1.什么是語音助手 2.語音助手的發展過程 3.現在有哪些成熟的語音助手 4.語音助手對人類發展的影響 1.什么是語音助手 語音助手是一種能夠通過語音交互與用戶進行溝通和執行任務的虛擬助手。它基于人工智能和自然語言處理技術&#xff0c;能夠理解用戶的語音指令&#x…