149.二叉樹:二叉樹的前序遍歷(力扣)

代碼解決

這段代碼實現了二叉樹的前序遍歷,前序遍歷的順序是:訪問根節點 -> 遞歸遍歷左子樹 -> 遞歸遍歷右子樹。以下是詳細解釋,包括各個部分的注釋:

// 二叉樹節點的定義
struct TreeNode {int val;                // 節點值TreeNode *left;         // 左子節點TreeNode *right;        // 右子節點TreeNode() : val(0), left(nullptr), right(nullptr) {}                      // 默認構造函數TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}                 // 帶值的構造函數TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} // 帶值和左右子節點的構造函數
};class Solution {
public:// 遞歸遍歷函數,用于前序遍歷void traversal(TreeNode* tree, vector<int>& res){if(tree == NULL) return;            // 如果節點為空,則直接返回res.push_back(tree->val);           // 訪問根節點,將節點值加入結果向量traversal(tree->left, res);         // 遞歸遍歷左子樹traversal(tree->right, res);        // 遞歸遍歷右子樹}// 前序遍歷的主函數vector<int> preorderTraversal(TreeNode* root) {vector<int> result;                 // 存儲遍歷結果的向量traversal(root, result);            // 調用遞歸函數進行前序遍歷return result;                      // 返回結果向量}
};

詳細解釋

  1. TreeNode 結構體

    • 定義了一個二叉樹節點結構體TreeNode,包括節點的值val,左子節點指針left,和右子節點指針right
    • 提供了三種構造函數:
      • 默認構造函數初始化節點值為0,左右子節點為空。
      • 帶一個整數參數的構造函數初始化節點值為給定值,左右子節點為空。
      • 帶一個整數和兩個子節點參數的構造函數初始化節點值和左右子節點。
  2. Solution 類

    • 包含前序遍歷二叉樹的實現。
  3. traversal 函數

    • 這是一個遞歸函數,用于執行前序遍歷。
    • 參數tree是當前節點,res是存儲遍歷結果的向量。
    • 首先檢查當前節點是否為空,如果為空,則返回。
    • 然后將當前節點的值加入結果向量。
    • 接下來遞歸遍歷左子樹和右子樹。
  4. preorderTraversal 函數

    • 這是前序遍歷的主函數。
    • 創建一個空的結果向量result
    • 調用遞歸函數traversal從根節點開始進行前序遍歷。
    • 最后返回結果向量。

前序遍歷的順序

在前序遍歷中,首先訪問根節點,然后遞歸遍歷左子樹,最后遞歸遍歷右子樹。例如,給定以下二叉樹:

使用場景

前序遍歷常用于:

  • 復制二叉樹
  • 計算二叉樹節點的數量
  • 前序表達式的求值
  • 將二叉樹轉換為其他數據結構

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

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

相關文章

php -v在cmd中正常顯示 在vscode中卻報錯

效果展示 原因 在vscode中 終端是 PowerShell PowerShell 默認情況下它不會繼承系統的PATH環境變量 解決方案 使用CMD作為終端 打開VSCode設置&#xff08;File > Preferences > Settings 或 Ctrl,&#xff09;。搜索 terminal.integrated.shell.windows。更改其值…

springboot集成nacos

springboot集成nacos 1.版本2. POM依賴3. nacos服務3.1 下載nacos壓縮包3.2 啟動nacos 4. yaml配置5.Demo5.1 配置中心簡單格式獲取方式普通方式還可以再啟動類上添加注解完成5.2 獲取json格式的demo5.2 自動注冊根據yaml配置 1.版本 nacos版本:2.3.2 springboot版本&#xff…

【已解決】使用StringUtils.hasLength參數輸入空格仍然添加成功定價為負數仍然添加成功

Bug情景 今天在做功能測試時&#xff0c;發現使用使用StringUtils.hasLength&#xff08;&#xff09;方法以及定價為負數時&#xff0c;添加圖書仍然成功 思考過程 0.1 當時在做參數檢驗時用了spring提供的StringUtils工具包&#xff0c;百度/大數據模型說&#xff1a; 0.2…

Redis:redis基礎

Redis Remote Dictionary Service即遠程字典服務 一個基于內存的key-value結構數據庫,在開發中常常作為緩存存儲不經常被改變的數據 基于內存存儲,讀寫性能高 在企業中應用廣泛 Redis介紹 用C語言開發的開源高性能鍵值對數據庫,可以達到10w的qps,可以存儲豐富的value類型…

【ubuntu20】--- 定時同步文件

在編程的藝術世界里&#xff0c;代碼和靈感需要尋找到最佳的交融點&#xff0c;才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里&#xff0c;我們將共同追尋這種完美結合&#xff0c;為未來的世界留下屬于我們的獨特印記。 【Linux命令】--- 多核壓縮命令大全&…

肉類食品解凍污水處理設備功能特點

諸城市鑫淼環保小編帶大家了解一下肉類食品解凍污水處理設備功能特點 肉類食品解凍污水處理設備是專門用于處理肉類加工過程中產生的解凍廢水的設備。這些設備在保障肉類食品生產過程中的衛生安全同時&#xff0c;也有效處理了廢水&#xff0c;避免了環境污染。以下是對肉類食品…

VM虛擬機共享文件夾fuse: bad mount point `/mnt/hgfs‘: No such file or directory

報錯顯示掛載點 /mnt/hgfs 不存在&#xff0c;你需要先創建這個目錄。可以按照以下步驟進行操作&#xff1a; 創建掛載點目錄&#xff1a; sudo mkdir -p /mnt/hgfs 手動掛載共享文件夾&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 確保每次啟動時自動…

液氮罐內部會污染嗎

液氮罐是一種常見的存儲液態氮的設備&#xff0c;廣泛應用于科研、生物醫藥、食品冷凍等領域。但是&#xff0c;人們對于液氮罐內部是否會產生污染一直存在疑問。 我們來看液氮罐內部可能的污染源。液氮罐內部主要存在以下幾種潛在的污染來源&#xff1a;氣體污染、雜質污染、…

C++ | Leetcode C++題解之第117題填充每個節點的下一個右側節點指針II

題目&#xff1a; 題解&#xff1a; class Solution { public:void handle(Node* &last, Node* &p, Node* &nextStart) {if (last) {last->next p;} if (!nextStart) {nextStart p;}last p;}Node* connect(Node* root) {if (!root) {return nullptr;}Node *…

推券客CMS淘寶優惠券網站源碼

推券客CMS淘寶優惠券網站源碼是一個以PHPMySQL進行開發的PHP淘寶客優惠券網站。支持電腦站、手機站以及微信公眾號查券。支持多級代理返利和阿里媽媽最新的渠道管理等功能。 五大優勢 一、全開源 推券客cms網站程序數據庫完全開源,目前市場上基本都是以下2種淘寶客系統 第一…

LeetCode - 雙指針(Two Pointers) 算法集合 [對撞指針、快慢指針、滑動窗口、雙鏈遍歷]

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139270999 雙指針算法是一種常見且靈活的技巧&#xff0c;通過使用兩個指針協同完成任務。這些指針可以指向不同的元素&#xff0c;具體應用取決于…

Java中的異常處理策略:編寫健壯的軟件

異常處理是Java編程中一個重要的方面&#xff0c;正確的異常處理策略可以使軟件更加健壯和易于維護。本文將詳細探討Java中的異常處理機制&#xff0c;介紹常見的異常類&#xff0c;以及提供有效的異常處理技巧和最佳實踐。 #### 1. Java異常類別 Java中的異常分為兩大類&…

Clickhouse 字符串函數使用總結—— Clickhouse基礎篇(七)

文章目錄 判空非空判斷字符串長度左補齊字符串右補齊字符串字符串轉小寫字符串轉大寫重復字符串拼接字符串函數計算子串base64編碼base64解碼判斷開頭字符串判斷結尾字符串刪除空白字符從HTML提取純文本字符串部分替換字符串全部替換字符串正則部分替換字符串正則全部替換計算子…

Spring Boot 與 OpenJ9 的 Docker 集成:提升 Java 應用性能的新選擇

## 引言 隨著 Docker 的普及&#xff0c;越來越多的開發者開始使用 Docker 來部署和管理他們的應用。在這種趨勢下&#xff0c;將 Spring Boot 與 OpenJ9 結合使用&#xff0c;可以為 Java 應用帶來更高的性能和更低的資源占用。本文將介紹如何在 Docker 環境中使用 Spring Bo…

回顧封裝、繼承和多態的概念,并給出相關示例

封裝、繼承和多態是面向對象編程&#xff08;OOP&#xff09;的三個核心概念。下面我將分別解釋這些概念&#xff0c;并給出相應的示例。 封裝 概念&#xff1a;封裝是將數據&#xff08;變量&#xff09;和操作數據的方法&#xff08;函數&#xff09;組合到一個類中&#x…

pytest斷言與Selenium模擬操作的規劃案例

pytest斷言與Selenium模擬操作的規劃案例 在使用pytest進行自動化測試時&#xff0c;斷言是驗證測試結果是否符合預期的關鍵步驟。pytest提供了簡潔的斷言語法&#xff0c;使得編寫測試用例更加直觀和易于維護。以下是一個簡單的規劃案例&#xff0c;展示了如何在pytest中使用…

202309青少年軟件編程(Python)等級考試試卷(四級)

第 1 題 【單選題】 用枚舉算法求解“100 以內既能被 3 整除又能被 4 整除的元素”時, 在下列數值范圍內,算法執行效率最高的是? ( ) A :1~101 B :4~100 C :12~100 D :12~96 正確答案:D 試題解析: 在選取循環控制變量時, 枚舉范圍應盡可能小, 但又不能遺漏。 第 …

掌握Python循環:從基礎到應用的完整指南

循環語句是編程中常用的一種結構&#xff0c;用于重復執行特定的代碼塊。Python3 提供了幾種類型的循環語句&#xff0c;包括for循環和while循環。接下來&#xff0c;我會詳細解釋循環語句的基本語法、常用命令、示例、應用場景、注意事項和總結。 基本語法 for 循環 for 變…

什么是勒索軟件

什么是勒索軟件 勒索軟件又稱勒索病毒&#xff0c;是一種特殊的惡意軟件&#xff0c;又被歸類為“阻斷訪問式攻擊”&#xff08;denial-of-access attack&#xff09;&#xff0c;與其他病毒最大的不同在于攻擊手法以及中毒方式。勒索軟件的攻擊方式是將受害者的電腦鎖起來或者…

mysql-增量備份流程詳細流程

3.增量備份流程 原理&#xff1a;每次備份上一次備份到現在產生的新數據 1.在數據庫上面創建一個測試的庫 增量備份流程&#xff08;重要) 增量備份跟上一次相比 我增加了啥--incremental //放到何處 --incremental-basedir //上一級//第一次增量備份 innobackupex --user…