c#二叉樹 取葉子節點個數_兩種類似但是原理不同的算法求二叉樹的所有葉子節點和...

e1c502029ba786d12f5c93bab70e00b4.png

技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然后到中級難度,最后到hard難度全部完。

目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由于篇幅和精力有限,其他語言的實現有興趣的朋友請自己嘗試。

初級難度說的差不多的時候,我打算再加點其他內容,我可能會從操作系統到協議棧,從分布式聊到大數據框架,從大數據聊到人工智能,... ...。

如果有任何問題可以在文章后評論或者私信給我

我會持續分享下去,敬請您的關注。

LeetCode 404. 左葉子之和(Sum of Left Leaves)

問題描述:

計算給定二叉樹的所有左葉子之和。

示例:

8c8c4213f4a65f699cf7cd060dfc5ff7.png

C語言實現:

我們知道求所有葉子節點的方法,是遞歸的將左右子樹的葉子節點值相加。

這道題只是在此基礎上增加了一個條件而已,即需要加一個判斷以確定一個葉子節點是否是左葉子節點。

這里我們有兩種方法。

第一種方法:

直接判斷是否是左葉子節點,如果是,那么返回它的值與右邊兄弟節點遞歸的結果的和,因為它的兄弟節點不一定是葉子節點,所以還要遞歸。

如果某節點的左右節點都不是葉子節點,那么就返回其左右節點遞歸的和,這個很容易理解。

代碼如下:

a1ae5f733fbd1e04fb0e8f79ed6b432b.png

第二種方法:

這需要定義一個新的遞歸函數,使得在遍歷的時候標記接下來的節點是否是左節點。

如果下面要遍歷的節點是當前節點的左節點,那么除了將左節點傳遞給新函數外,還有傳遞一個true值給新函數,以標記這是一個左節點,同樣的,如果是右節點,傳遞右節點和一個false給新函數。那么新函數在做處理的時候,首先看傳過來的參數,如果標記這是一個左節點,那么返回它的值。否則繼續遞歸該節點的子節點并返回他們的和。

代碼如下:

4e810a8f5c7cfc1c39d6cc73a981460d.png

從代碼來看這兩種實現都很類似,但是原理是有些不同的。

他們的算法復雜度是相同的,性能上的表現也基本一致。

7a91f78cf1f97b642cdcc5ad3ca40947.png

python語言的實現:

python的實現用的是第一種方式,第二種方式,讀者自行嘗試。

代碼如下:

3d386ba1d05f5529967ddd979e2f51b4.png
c39f04db292a10f65897d8d21c96c74e.png

Java語言的實現:

Java 的實現用的是第一種方式,第二種方式,讀者自行嘗試。

代碼如下:

2e77db045eb9272399006cb55c6eabb8.png
e7033fd9e5287b9e2685dddb6a1ae93a.png

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

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

相關文章

所有的service報紅但不報錯_從一個應用報錯來看centos系統的/tmp目錄自動清理規則...

概述分享最近應用碰到的一個奇怪bug,一開始以為是代碼上的問題,找了一段時間發現居然是因為系統的一個自動清理規則導致,下面一起來看看吧~一、應用報錯:logwire.core.exceptions.GeneralUnhandledException: 服務端未處理異常...…

python對瀏覽器的常用操作_Selenium元素的常用操作方法分析

本文實例講述了Selenium元素的常用操作方法。分享給大家供大家參考,具體如下:Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozill…

springboot中接口實例化_AngularJs中控制器的定義,實例化,作用域范圍

AngularJs中控制器的定義,實例化,作用域范圍基于AngularJS入門與進階(江榮波 著)這本書的筆記AngularJS 1.x的demoAngularJS1.x和Angular2,4,5是不一樣的兩個東西,構建方式,語法,都很多不同AngularJs控制器定義與實例化…

高斯核函數參數確定_高斯過程

之前看過高斯過程(GP),不過當時也沒太看懂,最近花時間認真研究了一下,感覺總算是明白咋回事了,本文基于回歸問題解釋GP模型的思想和方法。文中的想法是自己思考總結得來,并不一定準確,也可能存在錯誤性。為…

uniapp光標自動定義到文本框_特檢自動化行吊靜力檢測方案

主要測量功能使用徠卡測量開發的Windows版數據傳輸軟件,通過藍牙連接徠卡DISTO,經過簡單的測量周期設置,即可實現自動化的距離檢測。測量數據還可以輸出Excel,甚至可以實時發送至PC運行的第三方軟件中,這么強大的軟件還…

安裝python時需要勾選_一體化污水處理設備安裝時需要注意事項

一體化污水處理設備用于處理生活污水和低濃度有機污水,它基本上采用機電完全封閉的結構,不需要專業人員進行管理。它方便且易于清潔,因此引起了很多關注。一體化污水處理設備的安裝方法通常為三種:地埋式,地上式和半地…

oracle驅動maven報錯_在Maven倉庫中添加Oracle JDBC驅動

由于Oracle授權問題,Maven3不提供Oracle JDBC driver,為了在Maven項目中應用Oracle JDBC driver,必須手動添加到本地倉庫。一.首先要得到Oracle JDBC Driver2.通過Oracle的安裝目錄獲得,位置在“{ORACLE_HOME}jdbclibojdbc14.jar”二.手動安裝…

python3.6程序_python3.6如何生成exe程序

PyInstaller的原理簡介PyInstaller其實就是把python解析器和你自己的腳本打包成一個可執行的文件,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行文件會提高運行效率,相反可能會降低運行效率,好處就是在運…

java切片_ java中一個極其強悍的新特性Stream詳解(非常實用)

java8中有兩個非常有名的改進,一個是Lambda表達式,一個是Stream。如果我們了解過函數式編程的話,都知道Stream真正把函數式編程的風格引入到了java中。這篇文章由簡入繁逐步介紹Stream。一、Stream是什么從名字來看,Stream就是一個…

java獲取網絡圖片_有了這50套Java畢設項目(源碼 案例),offer拿到手軟,無償分享...

簡介:又到了開學季,不少人都很是煩惱,手把手教你做Java畢設項目,有教程視頻源碼100套隨意選擇,試試手!!列舉其中2個系統大綱在線考試系統1.綜述網絡考試系統的項目背景及國內外發展現狀&#xf…

python字典的建立和輸出_字典的創建和使用

直接創建d {age: 23, name: Daniel, sex: 1}輸出結果:{age: 23, name: Daniel, sex: 1}dict函數# 通過序列對建立字典vaulues [(name, Daniel), (age, 23), (sex, 1)]print dict(values)# 通過關鍵字建立字典print dict(nameDaniel, age23, sex1)# 如果 dict 不傳…

python字符串出棧方法_1.Python實現字符串反轉的幾種方法

1.Python實現字符串反轉的幾種方法題目: 在Python環境下用盡可能多的方法反轉字符串,例如將s "abcdef"反轉成 "fedcba"第一種:使用字符串切片result s[::-1]第二種:使用列表的reverse方法l list(s)l.reverse()result …

linux將日期和日歷信息追加到文件中_Linux常用指令

常用指令 1、幫助指令 man [指令或者配置文件] help 指令 2、文件目錄類指令 1、pwd 功能:顯示當前工作目錄的絕對路徑 2、ls [選項] [目錄或者文件] 功能:列出文件名和目錄使用:ls -l 以列表的形式顯示信息ls -a …

python播放音樂同步歌詞_使用Python下載歌詞并嵌入歌曲文件中的實現代碼

使用python掃描本地音樂并下載歌詞這次這個真的是干貨哦,昨晚弄了半晚上,,,,從8點吃完飯就開始寫,一直到了快12點才弄好,,,新手,傷不起呀。。。。先簡單的說下…

ajax mysql點贊_php+mysql結合Ajax實現點贊功能完整實例

phpmysql結合Ajax實現點贊功能完整實例131415161718192021222324252627282930313233343536//判斷是否已經存在了cookiefunction checkcookie(gindex){var thiscookie goodplus gindex;var mapcookie getCookie(thiscookie)if (mapcookie!null && mapcookie!"&q…

一個搜索框多個按鈕_網站搜索欄設計指南:要不要?怎么設計?

在網站的設計過程中,搜索欄是一個很容易被忽略的部分,但用戶卻依賴它來尋找特定的信息。由于搜索欄是網站中最常用的元素之一,所以搜索欄的設計對用戶體驗有著重要的影響。網站是否需要搜索欄?搜索欄使用背后的思維和心理是幫助用…

mysql的使用優化問題嗎_如何對 mysql 進行優化的問題

3641 天前mingszu-------------------------------------------------------------------------------------------------------------------------------------------------------------------| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Ca…

通過 xlsx 解析上傳excel的數據

一、前言 在前端開發中,特別是在后臺管理系統中,導入數據(上傳excel)到后端是是否常見的功能;而一般的實現方式都是通過接口將excel上傳到后端,再有后端進行數據解析并做后續操作。 今天,來記錄…

狀態機設計的一般步驟_淺談狀態機

來源:公眾號【ZYNQ】ID :FreeZynq整理 :李肖遙本文目錄前言狀態機簡介狀態機分類Mealy 型狀態機Moore 型狀態機狀態機描述一段式狀態機二段式狀態機三段式狀態機狀態機優缺點總結擴展-四段式狀態機01. 前言狀態機是FPGA設計中一種非常重要、…

java中default_Java 中關于default 訪問權限的討論

Java中關于成員變量訪問權限問題一般書中會給出如下表格:簡單地描述一下表中的內容:用private 修飾的成員變量只能在類內部訪問;用default修飾的成員變量可以再內部訪問,也可以被同個包(同一目錄)中的類訪問;default修…