day17 | 110.平衡二叉樹、257. 二叉樹的所有路徑、404.左葉子之和

目錄:

解題及思路學習

110.平衡二叉樹

https://leetcode.cn/problems/balanced-binary-tree/

給定一個二叉樹,判斷它是否是高度平衡的二叉樹。

本題中,一棵高度平衡二叉樹定義為:

一個二叉樹每個節點?的左右兩個子樹的高度差的絕對值不超過 1 。

示例 1:

!https://assets.leetcode.com/uploads/2020/10/06/balance_1.jpg

輸入:root = [3,9,20,null,null,15,7]
輸出:true

思考:這題用迭代法好像不是特別好求。用遞歸試試。遞歸中用一個數,例如 - 1 來表示不滿足,這樣就可以簡化參數。

class Solution {
public:int getHeight(TreeNode* root) {if (root == NULL) return 0;int left = getHeight(root->left);if (left == -1) return -1;int right = getHeight(root->right);if (right == -1) return -1;return abs(left - right) > 1 ? -1 : max(left, right) + 1;}bool isBalanced(TreeNode* root) {return getHeight(root) == -1 ? false : true;}
};

257.?二叉樹的所有路徑

https://leetcode.cn/problems/binary-tree-paths/

給你一個二叉樹的根節點?root?,按?任意順序?,返回所有從根節點到葉子節點的路徑。

葉子節點?是指沒有子節點的節點。

示例 1:

!https://assets.leetcode.com/uploads/2021/03/12/paths-tree.jpg

輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]

思考:主要是模擬最后保存結果的過程。

// 版本一
class Solution {
private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中,中為什么寫在這里,因為最后一個節點也要加入到path中 // 這才到了葉子節點if (cur->left == NULL && cur->right == NULL) {string sPath;for (int i = 0; i < path.size() - 1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) { // 左 traversal(cur->left, path, result);path.pop_back(); // 回溯}if (cur->right) { // 右traversal(cur->right, path, result);path.pop_back(); // 回溯}}public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;traversal(root, path, result);return result;}
};

c++寫代碼中,如果最后的處理節點在空節點處,則遍歷的時候不用加 if(cur→left) 這樣的判斷條件。如果處理的節點是在葉子節點,則空節點不進入處理的邏輯,需要加判斷條件。

404.左葉子之和

https://leetcode.cn/problems/sum-of-left-leaves/

給定二叉樹的根節點?root?,返回所有左葉子之和。

示例 1:

!https://assets.leetcode.com/uploads/2021/04/08/leftsum-tree.jpg

輸入: root = [3,9,20,null,null,15,7]
輸出: 24
解釋: 在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24

思考:處理邏輯是當遇到左葉子節點的時候,返回左葉子節點的值。但是判斷左葉子節點還需要父節點。

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if (root == NULL) return 0;if (root->left == NULL && root->right == NULL) return 0;int left = sumOfLeftLeaves(root->left);if (root->left && root->left->left == NULL && root->left->right == NULL) {left = root->left->val;}int right = sumOfLeftLeaves(root->right);return left + right;}
};

迭代法:

這里用了棧作為容器。使用前序遍歷。

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {stack<TreeNode*> st;if (root == NULL) return 0;st.push(root);int result = 0;while(!st.empty()) {TreeNode* node = st.top();st.pop();if (node->left && !node->left->left && !node->left->right) {result += node->left->val;}if (node->right) st.push(node->right);if (node->left) st.push(node->left);}return result;}
};

復盤總結

個人反思

1、c++寫代碼中,如果最后的處理節點在空節點處,則遍歷的時候不用加 if(cur→left) 這樣的判斷條件。如果處理的節點是在葉子節點,則空節點不進入處理的邏輯,需要加判斷條件。

2、使用to_string函數可以將數字轉換為字符串, 返回值為轉換完的字符串。默認情況下,to_string默認輸出6位小數,但這不一定是您想要的。C ++ 11引入了std :: to_string的另一個重載版本,該版本接受一個小數位數參數。

頭文件:include<cstring>

std::to_string
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

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

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

相關文章

Linux學習之firewallD

systemctl status firewalld.service查看一下firewalld服務的狀態&#xff0c;發現狀態是inactive (dead)。 systemctl start firewalld.service啟動firewalld&#xff0c;systemctl status firewalld.service查看一下firewalld服務的狀態&#xff0c;發現狀態是active (runni…

okcc呼叫系統導入呼叫名單/客戶資料的數量上限,okcc通話聲音小有哪幾種處理辦法?

系統導入呼叫名單/客戶資料的數量上限 呼叫名單一次最多十萬 客戶資料一次最多五萬 通話聲音小有哪幾種處理辦法&#xff1f; 1、IP話機&#xff1a;通過話機上的音量調節按鈕來進行調節。 2、模擬話機&#xff1a;修改語音網關上的增益來實現。 “ 往IP增益”表示電話呼入…

stable diffusion 運行時報錯: returned non-zero exit status 1.

運行sh run.sh安裝stable diffusion時報錯&#xff1a;ImportError: cannot import name builder from google.protobuf.internal (stable-diffusion-webui/venv/lib/python3.8/site-packages/google/protobuf/internal/__init__.py) 原因&#xff1a;python版本過低&#xff0…

ubuntu16.04制作本地apt源離線安裝

一、首先在有外網的服務器安裝需要安裝的軟件&#xff0c;打包deb軟件。 cd /var/cache/apt zip -r archives.zip archives sz archives.zip 二、在無外網服務器上傳deb包&#xff0c;并配置apt源。 1、上傳deb包安裝lrzsz、unzip 用ftp軟件連接無外網服務器協議選擇sftp…

股票交易c接口包含哪些調用函數?

股票交易的C接口中可能包含多個調用函數&#xff0c;具體的調用函數取決于所使用的接口規范和交易所的要求。接下來看看下面是一些可能常見的股票交易C接口調用函數的示例&#xff1a; 1. 連接函數&#xff08;Connect&#xff09;&#xff1a;用于與交易所建立網絡連接。 2.…

CSS(JavaEE初階系列14)

目錄 前言&#xff1a; 1.CSS是什么 1.1CSS基本語法 2.引入樣式 2.1內部樣式表 2.2行內樣式表 2.3外部樣式 3.選擇器 3.1選擇器的種類 3.1.1基礎選擇器 3.1.2復合選擇器 4.常用元素屬性 4.1字體屬性 4.2文本屬性 4.3背景屬性 4.4圓角矩形 4.5元素的顯示模式 4…

?LeetCode解法匯總2682. 找出轉圈游戲輸家

目錄鏈接&#xff1a; 力扣編程題-解法匯總_分享記錄-CSDN博客 GitHub同步刷題項目&#xff1a; https://github.com/September26/java-algorithms 原題鏈接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺 描述&#xff1a; n 個朋友…

【Leetcode】84.柱狀圖中最大的矩形(Hard)

一、題目 1、題目描述 給定 n n n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。 示例1: 輸入:heights = [2,1,5,6,2,3] 輸出:10 解釋:最大的矩形為圖中紅色區域,面積為 10示例2:…

學習Vue:Vue Router的集成與基本配置

在Vue.js中&#xff0c;路由與導航是構建單頁應用程序&#xff08;SPA&#xff09;的關鍵概念。Vue Router是Vue.js官方提供的路由管理庫&#xff0c;它允許您輕松地實現頁面之間的切換、嵌套路由和參數傳遞。在本文中&#xff0c;我們將深入了解Vue Router的集成和基本配置。 …

Stephen Wolfram:那么…ChatGPT 在做什么,為什么它有效呢?

So … What Is ChatGPT Doing, and Why Does It Work? 那么…ChatGPT在做什么&#xff0c;為什么它有效呢&#xff1f; The basic concept of ChatGPT is at some level rather simple. Start from a huge sample of human-created text from the web, books, etc. Then train…

IDA遠程調試真機app

IDA遠程調試真機app 第一步&#xff1a;啟動 android_server&#xff0c;并修改端口 # 啟動android_server ./android_server -p31928第二步&#xff1a;端口轉發、掛起程序 # 端口轉發adb forward tcp:31928 tcp:31928# 掛起程序 adb shell am start -D -n com.qianyu.antid…

Hyper-V增加橋接網絡設置(其他方式類同)

點擊連接到的服務器&#xff0c;右單擊或者右邊點擊“虛擬交換機管理器” 選擇網絡種類 配置虛擬交換機信息 外部網絡選擇物理機網卡設備

Linux中UDP服務端和客戶端

1 服務端代碼 #include <stdio.h> #include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h>#define PORT 6666 //端口號&#xff1a;1024~49191 #define IP "192.168.1.110"//"192.168.122.1…

中國“諾貝爾獎”未來科學大獎公布2023年獲獎名單

未來科學大獎委員會于8月16日公布2023年獲獎名單。柴繼杰、周儉民因發現抗病小體并闡明其結構和在抗植物病蟲害中的功能做出的開創性工作獲得“生命科學獎”&#xff0c;趙忠賢、陳仙輝因對高溫超導材料的突破性發現和對轉變溫度的系統性提升所做出的開創性貢獻獲得“物質科學獎…

突破網絡編程1024限制的方法(修改配置文件)

文章目錄 概述修改linux配置相關命令步驟1. 打開終端2. 使用sudo權限編輯文件3. 添加資源限制配置4. 保存和退出5. 重啟系統或重新登錄 其他方法1. 使用事件驅動的框架2. 使用連接池3. 負載均衡4. 使用線程池和進程池5. 升級操作系統設置6. 使用專業的高性能服務器7. 分布式架構…

深入源碼分析kubernetes informer機制(三)Resync

[閱讀指南] 這是該系列第三篇 基于kubernetes 1.27 stage版本 為了方便閱讀&#xff0c;后續所有代碼均省略了錯誤處理及與關注邏輯無關的部分。 文章目錄 為什么需要resyncresync做了什么 為什么需要resync 如果看過上一篇&#xff0c;大概能了解&#xff0c;client數據主要通…

1、基于 CentOS 7 構建 LVS-DR 群集。 2、配置nginx負載均衡

一、基于CentOS7和、構建LVS-DR群集 準備四臺虛擬機 ip作用192.168.27.150客戶端192.168.27.151LVS192.168.27.152RS192.168.27.152RS 關閉防火墻 [rootlocalhost ~]# systemctl stop firewalld安裝ifconfig yum install net-tools.x86_64 -y1、DS上 1.1 配置LVS虛擬IP …

uniapp開發微信小程序使用painter將頁面轉換為圖片并保存到本地相冊

引言 我使用到painter的原因是&#xff0c;在uniapp開發微信小程序時&#xff0c;需要將一個頁面的內容轉換成圖片保存到本地相冊。 起初在網上找到很多都是在uniapp中使用 html2canvas 將網頁轉換成圖片再jspdf將圖片轉換為pdf&#xff0c;但是這種方式在小程序環境不支持&am…

opencv進階08-K 均值聚類cv2.kmeans()介紹及示例

K均值聚類是一種常用的無監督學習算法&#xff0c;用于將一組數據點分成不同的簇&#xff08;clusters&#xff09;&#xff0c;以便數據點在同一簇內更相似&#xff0c;而不同簇之間差異較大。K均值聚類的目標是通過最小化數據點與所屬簇中心之間的距離來形成簇。 當我們要預測…

opencv實現以圖搜圖

這里寫目錄標題 1. 步驟1.1 導入OpenCV庫&#xff1a;1.2 加載圖像1.3 提取特征1.4 匹配特征1.5 顯示結果 2. 完整代碼3. 測試圖片及效果 1. 步驟 1.1 導入OpenCV庫&#xff1a; 在您的C代碼中&#xff0c;首先需要導入OpenCV庫。您可以使用以下語句導入核心模塊&#xff1a;…