Leetcode每日一題

https://leetcode.cn/problems/binary-tree-preorder-traversal/

這道題目需要我們自行進行創建一個數組,題目也給出我們需要自己malloc一個數組來存放,這樣能達到我們遍歷的效果,我們來看看他的接口函數給的是什么。

可以看到的是這個接口函數給了一個root就是根節點的意思,但是這里的returnsize是什么意思可能有問題???

其實returnsize這里雖然給的是指針,是因為我們函數棧幀創建和銷毀的時候,形參只是實參的一份臨時拷貝,這樣的話,我們就算給returnsize賦值進行改變,也不能改變他的值

這里的returnsize是我們需要在這個函數外面統計數組的個數

我們來看這個題目的第一個問題就是我們要開辟一個數組,開辟數組的話我們是不是得知道這個數組空間有多大才行,所以我們得先寫一個函數就是統計節點的函數,那這個函數其實就是遍歷數組,用的就是遞歸的方式進行遍歷。

int BinaryTreeSize(struct TreeNode* root)
{if(root == NULL){return 0;}return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;
}

這個就是我們來統計有多少節點的函數,思想就是我們遇到空的時候就返回,不是空的時候就是得返回一個節點。下面我們就只需要在題目給的接口函數進行調用,然后malloc一個數組出來就行。

int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = BinaryTreeSize(root);int* arry = (int*)malloc(sizeof(int)*n);assert(arry);int size = 0;_preorderTraversal(root, arry, &size);*returnSize = n;return arry;}

然后我們需要做的就是實現我們遍歷函數的內容,其實很簡單,因為前序遍歷的時候是先中間節點,然后是他的左孩子和右孩子,所以我們的遞歸方法就出來了。

void _preorderTraversal(struct TreeNode* root, int* a,int* pi)
{if(root == NULL){return ;}a[(*pi)++] = root->val;_preorderTraversal(root->left, a, pi);_preorderTraversal(root->right, a, pi);}

這里需要注意的地方就是pi這個值我們是需要取出他的地址進行,因為如果不是地址的話,我們每次函數遞歸的時候建立函數棧幀的時候就是會有問題,每次都是局部變量,所以我們得用他的地址,這個也就是為什么我們的size是取地址傳進來的,而不是直接傳0,因為傳0的話,形參只是實參的一份臨時拷貝,改變形參并不會對實參有任何的影響。

謝謝大家觀看,我們下次再見。

?

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

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

相關文章

說說webpack中常見的loader?解決了什么問題?

在Webpack中,Loader是用于處理各種文件類型的模塊加載器,它們用于對文件進行轉換、處理和加載。常見的Loader解決了以下問題: 處理 JavaScript 文件:Babel Loader用于將最新的JavaScript語法轉譯為瀏覽器兼容的版本,以…

5_CSS三大特性盒子模型

第5章-盒子模型【比屋教育】 本課目標(Objective) 掌握CSS三大特性理解什么是盒子模型掌握內邊距padding的用法掌握外邊距margin的用法 1. CSS的層疊,繼承,優先級 1.1 CSS層疊 層疊:是指多個CSS樣式疊加到同一個元…

Web(8)SQL注入

Web網站(對外門戶) 原理:not>and>or(優先級) 一.低級注入 order by的作用是對字段進行排序,如order by 5,根據第五個字段 進行排序,如果一共有4個字段,輸入order by 5系統就會報錯不 …

詳細介紹開源固件-TF-A

什么是TF-A? TF-A(Trusted Firmware-A)是一種用于嵌入式系統的開源固件,而不是Linux的一部分。TF-A主要用于ARM架構的處理器和設備,它提供了一組安全和可信任的軟件組件,用于引導和初始化系統。 如下是其…

GD32F30X-RT-Thread學習-線程管理

1. 軟硬件平臺 GD32F307E-START Board開發板MDK-ARM Keil 2.RT-Thread Nano 3.RT-Thread 內核學習-線程管理 ? 在多線程操作系統中,可以把一個復雜的應用分解成多個小的、可調度的、序列化的程序單元,當合理地劃分任務并正確地執行時,這…

qt可以詳細寫的項目或技術

1.QT 圖形視圖框架 2.QT 模型視圖結構 3.QT列表顯示大量信息 4.QT播放器 5.QT 編解碼 6.QT opencv

Linux--RedHat--安裝和配置C++環境

百度下載,安裝包: 鏈接:https://pan.baidu.com/s/1IgBfCCRxGYZ_PPiedad0xQ 提取碼:ffff 下載后,建個目錄,先解壓好安裝包! (兩種方法)執行如下命令: 參考…

Bypass open_basedir

講解 open_basedir是php.ini中的一個配置選項,可用于將用戶訪問文件的活動范圍限制在指定的區域。 假設open_basedir/var/www/html/web1/:/tmp/,那么通過web1訪問服務器的用戶就無法獲取服務器上除了/var/www/html/web1/和/tmp/這兩個目錄以外的文件。…

Java——面試:String 和 StringBuffer 的區別?

相同點: String 和 StringBuffer,它們可以儲存和操作字符串, 即包含多個字符的字符數據。 String 和 StringBuffer 的區別有以下幾點: 1.String 類提供了數值不可改變的字符串。而 StringBuffer 類提供的字符串進行修改。 當你知…

洛谷 P8674 [藍橋杯 2018 國 B] 調手表

文章目錄 [藍橋杯 2018 國 B] 調手表題目描述輸入格式輸出格式樣例 #1樣例輸入 #1樣例輸出 #1 提示 題意解析CODE分析一下復雜度 [藍橋杯 2018 國 B] 調手表 題目描述 小明買了塊高端大氣上檔次的電子手表,他正準備調時間呢。 在 M78 星云,時間的計量…

JVM虛擬機:命令行查看JVM垃圾回收器的執行信息

在eclipse中打開命令行窗口 window->show view->Terminal 這樣就打開了Terminal窗口,效果如下所示: java -XX:PrintCommandLineFlags -version 這個命令可以查看一些配置信息,其中最重要的配置信息就是,當前使用的G1回收器…

什么是漏洞掃描

漏洞掃描是指基于漏洞數據庫,通過掃描等手段對指定的遠程或者本地計算機系統的安全脆弱性進行檢測,發現可利用漏洞的一種安全檢測的 行為,也是一類重要的網絡安全技術。它和防火墻、入侵檢測系統互相配合,能夠有效提高網絡的安全性…

鍵盤打字盲打練習系列之成為大師——5

一.歡迎來到我的酒館 盲打,成為大師! 目錄 一.歡迎來到我的酒館二.關于盲打你需要知道三.值得收藏的練習打字網站 二.關于盲打你需要知道 盲打系列教程,終于寫到終章了。。。一開始在看網上視頻,看到up主熟練的打字技巧&#xff…

LabVIEW與Tektronix示波器實現電源測試自動化

LabVIEW與Tektronix示波器實現電源測試自動化 在現代電子測試與測量領域,自動化測試系統的構建是提高效率和精確度的關鍵。本案例介紹了如何利用LabVIEW軟件結合Tektronix MDO MSO DPO2000/3000/4000系列示波器,開發一個自動化測試項目。該項目旨在自動…

javascript中Reflect是什么?三分鐘初識

目錄 1. Reflect是什么?2. 為什么會出現Reflect?3. 需要怎么去使用Reflect?4. 最終的結果解決什么?5. 使用的注意點6. 常用的技巧 Reflect是Javascript中的一個內置對象,它提供了一組用于操作對象的方法,可…

Spring - BeanFactory和FactoryBean的理解

BeanFactory是什么? BeanFactory是Spring 容器的根接口,它是IOC的基本容器,負責管理和加載Bean,它為具體的IOC容器提供了最基本的規范,比如DefaultListableBeanFactory和ConfigurableBeanFactory,BeanFact…

《C++新經典設計模式》之第17章 中介者模式

《C新經典設計模式》之第17章 中介者模式 中介者模式.cpp 中介者模式.cpp #include <iostream> #include <map> #include <memory> using namespace std;// 中介者封裝一系列的對象交互 // 4種角色 // Mediator&#xff08;抽象中介者類&#xff09;&#x…

MYSQL練題筆記-高級查詢和連接-指定日期的產品價格

這依舊是中等題&#xff0c;想了好久&#xff0c;終于理解了很開心&#xff01; 一、題目相關內容 1&#xff09;相關的表和題目 2&#xff09;幫助理解題目的示例&#xff0c;提供返回結果的格式 二、自己初步的理解 題目是找出2019-08-16 時全部產品的價格&#xff0c;所以…

數字化時代的到來,IT運維產業正在發生深刻的變革

IT運維產業是隨著信息技術的發展而產生的&#xff0c;它涵蓋了從硬件到軟件、從應用到數據、從終端到云端等各個方面的維護和管理。隨著數字化時代的到來&#xff0c;IT運維產業正在發生深刻的變革。其中&#xff0c;大數據技術的廣泛應用和數據資源的日益豐富&#xff0c;正在…

使用最小花費爬樓梯

1.狀態表示 2.狀態轉移方程 3.初始化 保證填表時&#xff0c; 不越界 4.填表順序 從左往右 5.返回值 解法2&#xff1a; 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從右往左 5.返回值 min( dp[0] , dp[1] ) ----------------------------------------------------…