LeetCode 513. 找樹左下角的值 思考分析

題目

給定一個二叉樹,在樹的最后一行找到最左邊的值。
在這里插入圖片描述
在這里插入圖片描述

遞歸解

左下角要滿足兩個條件:
1、深度最大的葉子結點
2、最左結點:使用前序遍歷,優先左邊搜索。
1、確定遞歸函數的參數和返回值
參數:樹的根結點,maxlen記錄最大深度,maxleftval記錄最大深度最左結點的數值。

int maxlen = 0;		//全局變量,記錄最大深度
int maxleftval;		//全局變量 最大深度最左節點的數值
void traversal(TreeNode* root,int leftlen);

2、確定終止條件
遇到葉子結點,統計一下最大深度

if(root->left == NULL && root->right == NULL)
{if(leftlen > maxlen)		//如果是同一深度則不會進行更新數值{maxlen=leftlen;		//更新最大深度maxleftval = root->val;		//最大深度最左邊的數值}return ;
}

3、確定單層邏輯
和之前的思路一樣,在找最大深度的時候,遞歸過程中依然要使用回溯

//中,不需要操作
if(root->left)
{leftlen++;	//深度+1traversal(root->left,leflen);leftlen--;	//回溯,深度-1
}
if(root->right)
{leftlen++;	//深度+1traversal(root->right,leflen);leftlen--;	//回溯,深度-1
}
return ;

完整代碼

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int maxlen = -1;		//全局變量,記錄最大深度int maxleftval;		//全局變量 最大深度最左節點的數值void traversal(TreeNode* root,int leftlen){if(root->left == NULL && root->right == NULL){if(leftlen > maxlen)		//如果是同一深度則不會進行更新數值{maxlen=leftlen;		//更新最大深度maxleftval = root->val;		//最大深度最左邊的數值}return ;}//中,不需要操作if(root->left){leftlen++;	//深度+1traversal(root->left,leftlen);leftlen--;	//回溯,深度-1}if(root->right){leftlen++;	//深度+1traversal(root->right,leftlen);leftlen--;	//回溯,深度-1}return ;}int findBottomLeftValue(TreeNode* root) {traversal(root,0);return maxleftval;}
};

如果需要遍歷整棵樹,遞歸函數就不能有返回值。如果需要遍歷某一條固定路線,遞歸函數就一定要有返回值

層序遍歷解

層序遍歷,將每層第一個元素賦值給一個變量result。遍歷所有層,最后的result就是結果

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int findBottomLeftValue(TreeNode* root) {int result=0;queue<TreeNode*> que;if(root!=NULL) que.push(root);while(!que.empty()){//該層結點元素個數 = 該層隊列元素int size = que.size();//這里要使用固定大小的size,不能使用que.size(),因為在處理中que.size是不斷變化的//將這層元素送入隊列中并依次從隊首向隊尾將元素出隊列,每個元素出隊列的同時又將其不為空的子結點送入隊列for(int i =0;i<size;i++){if(i==0) result = que.front()->val;TreeNode* node = que.front();//將隊首元素送入該層結果que.pop();//將左右孩子結點入隊列,作為下一層的元素if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return result;}
};

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

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

相關文章

利用MyBatis的動態SQL特性抽象統一SQL查詢接口

1. SQL查詢的統一抽象 MyBatis制動動態SQL的構造,利用動態SQL和自定義的參數Bean抽象,可以將絕大部分SQL查詢抽象為一個統一接口,查詢參數使用一個自定義bean繼承Map,使用映射的方法構造多查詢參數.在遇到多屬性參數(例如order by,其參數包括列名,升序降序類型,以及可以多個列及…

ctype函數_PHP Ctype(字符類型)函數

ctype函數Ctype功能 (Ctype functions) PHP provides some of the built-in functions, which are used to verify the characters in the string i.e. to check whether a string contains the characters of specific types. PHP提供了一些內置函數&#xff0c;這些函數用于驗…

Linux 平臺下 MySQL 5.5 安裝 說明 與 示例

一.下載說明前期的一些準備說明&#xff0c;參考&#xff1a;MySQL 發展史http://blog.csdn.net/tianlesoftware/article/details/6999245Mysql 不同版本 說明http://blog.csdn.net/tianlesoftware/article/details/6723117 MySQL 分為Community Server 和 Enterprise Edition。…

開始python之旅

接觸python緣于工作所需&#xff0c;曾經接觸過C、C等語言&#xff0c;對于編程語言在學習上大體是一個套路&#xff0c;當然套路因人而異&#xff0c;適合就好。接下來&#xff0c;我將不斷分享python的知識和學習技巧&#xff0c;共同學習。 起源 初識一門語言善于先了解語言…

LeetCode 112. 路徑總和 、113. 路徑總和 II 思考分析

目錄112. 路徑總和題目遞歸解遞歸解&#xff0c;其他人的解法迭代解&#xff0c;其他人的解法113. 路徑總和 II題目遞歸解遞歸解&#xff0c;參考別人的思路112. 路徑總和 題目 給定一個二叉樹和一個目標和&#xff0c;判斷該樹中是否存在根節點到葉子節點的路徑&#xff0c;…

kotlin 查找id_Kotlin程序查找矩陣的轉置

kotlin 查找idA transpose of a matrix is simply a flipped version of the original matrix. We can transpose a matrix by switching its rows with its columns 矩陣的轉置只是原始矩陣的翻轉形式。 我們可以通過切換矩陣的行和列來轉置矩陣 Given a matrix, we have to…

[mongodb翻譯]分片和故障轉移

一個配置恰當的mongodb 分片集群不會有單點失效。 本章節描述了集群服務器中可能出現的故障&#xff0c;及相應的對策。 1. 某個mongos路由進程故障 每一個mongos會運行每一臺應用服務器上面&#xff0c;該應用服務器只能通過這個mongos進程和集群進行通信。mongos進程不是…

看張子陽的書真是收獲很多,也醒悟了很多(一)

摘錄&#xff1a; 這是有一次開會時&#xff0c;我的老總跟我們說了這樣一個事例&#xff1a;通常來說&#xff0c;醫生是很高尚的職業&#xff08;暫不考慮國內醫生的負面新聞&#xff09;&#xff0c;尤其是牙科醫生&#xff0c; 他們有著體面的工作并且收入不菲。但是&#…

【C++ grammar】抽象、封裝與this指針

目錄1、Abstraction and Encapsulation&#xff08;抽象與封裝&#xff09;1. Data Field Encapsulation (數據域封裝)2. Accessor and Mutator (訪問器與更改器)2.1. To read/write private data, we need get/set function (為讀寫私有數據&#xff0c;需要get/set函數)2.2. …

java創建臨時文件_用Java創建一個臨時文件

java創建臨時文件The task is to create a temporary file in Java. 任務是用Java創建一個臨時文件。 Creating a temporary file 創建一個臨時文件 To create a temporary file in java – we use createTempFile() method of "File" class. The createTempFile()…

十九、圖像的形態學操作

一、圖像形態學 圖像形態學是圖像處理學科的一個單獨分支學科 主要針對的是灰度圖和二值圖像 是由數學的集合論以及數學中的拓撲幾何原理發展而來 二、膨脹操作&#xff08;dilate&#xff09; 33的卷積核 以33為卷積核從左往右(從上往下)開始運行&#xff0c;若這卷積核…

X名稱空間(WPF)

筆記簡述 閑話x名稱空間簡要x名稱空間的Attributex名稱空間的標簽擴展x名稱空間的XAML指令元素閑話 本筆記參考與《深入淺出WPF》、MSDN、Some Blog… MSDN的飛機票點這里。 x名稱空間簡要 在VS中新建個WpfApplication都會自動生成xmlns:x"http://schemas.microsoft.com/w…

基于Bresenham和DDA算法畫線段

直線&#xff1a;ykxb 為了將他在顯示屏上顯示出來&#xff0c;我們需要為相應的點賦值&#xff0c;那么考慮到計算機的乘法執行效率&#xff0c;我們肯定不會選擇用Ykxb這個表達式求值&#xff0c;然后進行畫線段。 我們應當是將它轉化為加法運算。 下面提供兩種常見的算法&am…

leetcode 106. 從中序與后序遍歷序列構造二叉樹 105. 從前序與中序遍歷序列構造二叉樹思考分析

目錄1、106題目2、參考思路&#xff1a;遞歸切割數組3、105題目4、同樣思路的代碼1、106題目 2、參考思路&#xff1a;遞歸切割數組 代碼參考&#xff1a;公眾號&#xff1a;代碼隨想錄 后序數組中序數組 以 后序數組(左右中)的最后一個元素作為切割點&#xff0c;先切中序數組…

按頻率對元素進行排序

Prerequisite: 先決條件&#xff1a; Hashing data structure 散列數據結構 How to write user-defined comparator for priority queue STL in C? 如何在C 中為優先級隊列STL編寫用戶定義的比較器&#xff1f; How to sort a map based on values instead of value? 如何根…

二十、分水嶺算法

一、基本原理 分水嶺算法主要是基于距離變換&#xff08;distance transform&#xff09;&#xff0c;找到mark一些種子點&#xff0c;從這些種子點出發根據像素梯度變化進行尋找邊緣并標記 分水嶺&#xff1a;可以簡單的理解成一座山&#xff0c;然后來洪水了&#xff0c;水開…

細數WOW里暴雪的“親兒子”們

. 不知何時&#xff0c;魔獸世界的詞匯中忽然出現了一個新玩意&#xff1a;親兒子。雖說這個稱呼現在大多是拿來調侃法爺的&#xff0c;但江山代有兒子出&#xff0c;各領風騷一兩天&#xff0c;今天風光無限的法爺們也經歷過被其他職業壓得抬不起頭的小媳婦生涯。那么今天…

Linux下串口ttyS2,ttyS3不能用的問題解決辦法

PC104&#xff0c;Xlinux下&#xff0c;突然發現串口3,4不能用。。。 以為是硬件的問題&#xff0c;換成wince后&#xff0c;3,4工作正常&#xff0c;排除電路問題 在linux下查看dmesg: serial8250: ttyS0 at I/O 0x3f8 (irq 4) is a 16550Aserial8250: ttyS1 at I/O 0x2f8 (i…

安卓log.e函數打印示例_log1p()函數以及C ++中的示例

安卓log.e函數打印示例C log1p()函數 (C log1p() function) log1p() function is a library function of cmath header, it is used to get the natural logarithm (the base-e logarithm) of the one plus given value. It accepts a value (float, double, or long double) …

【C++grammar】C++類數據成員的初始化

目錄1、類成員的就地初始化example2、構造函數初始化3、默認構造函數&#xff1a;Default Constructor4、舉例5、成員的初始化方法的優先級1、類成員的就地初始化example class S { int m 7; // ok, copy-initializes m int n(7); // 錯誤&#xff1a;不允許用小括號初始化…