日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode题解(二叉树和递归问题)

發(fā)布時間:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode题解(二叉树和递归问题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇博客我們主要來看二叉樹和二叉樹問題中使用遞歸來解決問題的思路。這類問題有時思路很簡單,這是因為二叉樹具有天然的遞歸結(jié)構(gòu),所以我們使用遞歸的解法解決二叉樹有關(guān)的問題就變得非常明顯。

二叉樹天然的遞歸結(jié)構(gòu)

  • 語義
  • 終止條件
  • 遞歸過程

例子

二叉樹前序遍歷

//前序遍歷node節(jié)點 void preorder(TreeNode * node){if (node == NULL){ return; //終止條件}cout << node -> val;preorder(node -> left);preorder(node -> right);//遞歸過程 }復(fù)制代碼

二叉樹查找某個節(jié)點

bool contain(Node *node, key key){if (node == NULL)return false;if (key == node->key)return true;if( contain(node -> left,key) || contain(node -> right, key))return true;return false; }復(fù)制代碼

刪除一顆二叉樹

void destroy(Node * node){if(node == NULL)return;destroy(node->left);destroy(node->right);delete node;count --; }復(fù)制代碼

leetcode 104. 二叉樹的最大深度

class Solution { public://求節(jié)點root的深度int maxDepth(TreeNode* root) {//終止條件if(root == NULL){ return 0;}return 1 + max(maxDepth(root -> left), maxDepth(root -> right));} }; 復(fù)制代碼

相似問題

leetcode 111

一個簡單的二叉樹問題引發(fā)的血案

leetcode 226. 翻轉(zhuǎn)二叉樹

代碼實現(xiàn)

/// 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:TreeNode* invertTree(TreeNode* root) {if ( root == NULL ) {return NULL;}invertTree( root->left );invertTree( root->right );swap ( root->left, root->right );return root;}};復(fù)制代碼

相似問題

leetcode 100

leetcode 101

leetcode 222

leetcode 110


注意遞歸的終止條件

有的時候遞歸的終止條件是存在陷阱的。

leetcode 112. 路徑總和

解題思路

采取遞歸來解決這個問題,我們可以從頭結(jié)點開始,向它的左右孩子節(jié)點尋找sum-根節(jié)點的值,不斷向下尋找。這道題陷阱在于終止條件不是node == NULL。

/*** 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:bool hasPathSum(TreeNode* root, int sum) {if (root == NULL){return false;}//為葉子節(jié)點if (root -> left == NULL && root -> right == NULL){return root -> val == sum;}return hasPathSum(root -> left, sum - root -> val) || hasPathSum(root -> right, sum - root -> val);return false;} }; 復(fù)制代碼

定義遞歸問題

我們?nèi)绾问褂眠f歸的返回值來解決問題。 函數(shù)的語義很重要

leetcode 257. 二叉樹的所有路徑

思路

對于每一個節(jié)點,就是該節(jié)點的值加上“->”再加上左子樹的路徑字符串和右子樹路徑字符串。當(dāng)?shù)竭_葉節(jié)點時,將字符串加入結(jié)果集。

實現(xiàn)

/*** 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:vector<string> binaryTreePaths(TreeNode* root) {vector<string> res;if (root == NULL){return res;}if (root -> left == NULL && root -> right == NULL){res.push_back(to_string(root -> val));return res;}vector<string> lefts = binaryTreePaths(root -> left);for(int i = 0; i < lefts.size(); i++){res.push_back(to_string(root -> val) + "->" + lefts[i]);}vector<string> rights = binaryTreePaths(root -> right);for(int i = 0; i < rights.size(); i++){res.push_back(to_string(root -> val) + "->" + rights[i]);}return res;} };復(fù)制代碼

相似問題

leetcode 113

leetcode 129


稍復(fù)雜的遞歸邏輯

leetcode 437. 路徑總和 III

解題思路

猛地一看這個描述,和我們之前的Path Sum是一樣的。但是區(qū)別在于我們對于路徑的定義不一定要起始于根節(jié)點,終止于葉子結(jié)點,路徑可以從任意節(jié)點開始,但是只能是向下走的。

在一個節(jié)點上要通過三個部分獲得答案,第一個部分看看有沒有一條路徑,它包含node這個節(jié)點,并且它的和為sum,這個路徑我們進入findPath這個子過程,這個子過程本身又是一個遞歸函數(shù)。另外的兩部分就是要在node的左右子樹去尋找沒有這個ndoe節(jié)點的值,有沒有這樣的路徑,他們的和仍然為sum,這件事就是我們PathSum這個函數(shù)所做的。在node->left和node->right分別調(diào)用PathSum的過程中,他們也會調(diào)用findPath來求解。

代碼實現(xiàn)

#include <iostream>using namespace std;// 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:// 在以root為根節(jié)點的二叉樹中,尋找和為sum的路徑,返回這樣的路徑個數(shù)int pathSum(TreeNode* root, int sum) {if ( root == NULL) {return 0;}int res = findPath( root, sum );res += pathSum( root->left, sum );res += pathSum( root->right, sum );return res;}private:// 在以node為根節(jié)點的二叉樹中,尋找包含node的路徑,和為sum// 返回這樣的路徑個數(shù)int findPath( TreeNode* node, int num){if ( node == NULL ) {return 0;}int res = 0;if ( node->val == num ) {res += 1;}res += findPath( node->left, num - node->val );res += findPath( node->right, num - node->val );return res;}};復(fù)制代碼

二分搜索樹中的問題

leetcode 235. 二叉搜索樹的最近公共祖先

思路

二分搜索樹:
每個節(jié)點的鍵值大于左孩子
每個節(jié)點的鍵值小于右孩子
以左右孩子為跟的子樹仍為二分搜索樹

如果我們給的p,q節(jié)點都小于node節(jié)點,那么他們最近的公共祖先一定在node左邊。如果我們給的p,q節(jié)點都大于node節(jié)點,那么他們最近的公共祖先一定在ndoe右邊。如果一小一大,那么node一定是最近的公眾祖先。

代碼實現(xiàn)

/*** 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:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {assert(p != NULL && q != NULL);if (root == NULL){return NULL;}if ((root -> val > p -> val) && (root -> val > q -> val))return lowestCommonAncestor(root -> left, p, q);if ((root -> val < p -> val) && (root -> val < q -> val))return lowestCommonAncestor(root -> right, p, q);//p 與q在root的兩側(cè), 則root必為公共祖先,包含p為q的祖先return root;} };復(fù)制代碼

相似問題

leetcode 98

leetcode 450

leetcode 108

  • 中序遍歷

leetcode 230

leetcode 236



-------------------------華麗的分割線--------------------

看完的朋友可以點個喜歡/關(guān)注,您的支持是對我最大的鼓勵。

個人博客番茄技術(shù)小棧和掘金主頁

想了解更多,歡迎關(guān)注我的微信公眾號:番茄技術(shù)小棧

總結(jié)

以上是生活随笔為你收集整理的leetcode题解(二叉树和递归问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩一级片中文字幕 | 欧美亚洲伦理 | 操你啦在线视频 | 网站免费黄色 | 国产成人精品123区免费视频 | 五月婷婷俺也去 | 打屁股无遮挡网站 | 777久久久精品一区二区三区 | 全黄性高潮 | 性色tv | 五十路在线 | 欧美一区二区三区影视 | 欧美性大战久久久久久久 | 草女人视频 | 在线天堂中文字幕 | 久久7777 | 午夜裸体性播放 | 亚洲福利小视频 | 欧美日韩在线a | 免费在线视频你懂的 | 最近中文字幕免费mv视频7 | 在线观看亚洲天堂 | 亚洲第一天堂在线观看 | 热@国产 | 国产欧美一区二区精品忘忧草 | 黄久久久 | 国产熟女精品视频 | 伊人影院在线观看视频 | av网站久久| 丝袜五月天 | 日韩国产91 | 亚欧洲精品在线视频免费观看 | 色天使亚洲 | 中文字幕四区 | 99re久久精品国产 | 开心色站 | 97精品一区二区视频在线观看 | 欧美日韩伊人 | 成人试看120秒体验区 | jizz日本在线 | 少妇无套内谢免费视频 | 成人公开视频 | 狠狠搞狠狠干 | 国产精品免费观看视频 | 日韩精品视 | 2024av| 国产欧美日韩激情 | 婷婷中文| 亚州精品毛片 | 免费成人在线网站 | 在线二区| 欧美日韩成人在线 | 国产精品久久久久久久久绿色 | 日韩三级麻豆 | 免费黄色的网站 | 久久免费视频一区 | 在线观看入口 | 久久久久国产精品 | 欧美一本 | 日韩1区| 欧美色就是色 | 中文一区视频 | 中文字幕日韩一区二区 | 国产激情91 | 91小视频在线观看 | 亚洲成人av电影在线 | 成人a毛片久久免费播放 | 婷婷九月丁香 | 午夜精品久久久久久久爽 | 日本久久高清 | 国产精品夜夜爽张柏芝 | 一级高清视频 | 久久综合一区二区三区 | 久久奇米 | 嫩草综合 | 国产成人久久精品麻豆二区 | 丁香花高清在线 | 五月天狠狠操 | 欧美日韩免费一区二区 | 欧美一区二区三区黄片 | 天天草天天爽 | 青青草手机视频 | 亚洲国产日韩欧美一区二区三区 | 亚洲熟女综合一区二区三区 | 亚洲一区二区三区观看 | 国产精品久久久久久久久久久不卡 | 日韩成人在线播放 | 欧美激情二区三区 | 日韩在线观看你懂的 | 99福利网| 久久亚洲欧洲 | 日日麻批免费视频播放 | 26uuu精品一区二区在线观看 | 黄色大片在线播放 | 天天操天天舔天天干 | 色综合天天综合综合国产 | 天堂www中文在线资源 | 黄色一级片免费播放 | 午夜久久久久久 |