休息是不可能休息的

654.最大二叉樹

分析:相比較遍歷順序構建二叉樹,這個相對簡單。
思路:每次找到數組最大值,然后分割數組

class Solution {
public:TreeNode*judge(vector<int>&nums){if(nums.size()==0) return nullptr;int maxNum=0,index=0;for(int i=0;i<nums.size();i++){//獲取最大值和下標if(nums[i]>maxNum){maxNum=nums[i];index=i;}}TreeNode*root=new TreeNode(maxNum);if(nums.size()==1) return root;//切割左子樹和右子樹vector<int> leftNums(nums.begin(),nums.begin()+index);vector<int> rightNums(nums.begin()+index+1,nums.end());root->left=judge(leftNums);root->right=judge(rightNums);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {//思路:每次找到數組中最大值,然后進行左右切割return judge(nums);}
};

617.合并二叉樹

思路一:創建一個新的二叉樹,每次同時傳入二叉樹的同一位置
class Solution {
public:TreeNode* judge(TreeNode*root1,TreeNode*root2){if(root1==nullptr && root2==nullptr) return nullptr;TreeNode*newNode=new TreeNode();if(root1!=nullptr && root2!=nullptr){newNode->val=root1->val+root2->val;newNode->left=judge(root1->left,root2->left);newNode->right=judge(root1->right,root2->right);} if(root1==nullptr && root2!=nullptr){newNode->val=root2->val;newNode->left=judge(nullptr,root2->left);newNode->right=judge(nullptr,root2->right);} if(root1!=nullptr && root2==nullptr){newNode->val=root1->val;newNode->left=judge(root1->left,nullptr);newNode->right=judge(root1->right,nullptr);} return newNode;}TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//思路:直接同時遍歷兩個二叉樹,子節點不存在傳入下一個為空指針if(root1==nullptr) return root2;if(root2==nullptr) return root1;if(root1==nullptr && root2==nullptr) return nullptr;return judge(root1,root2);}
};

思路二:以其中一棵二叉樹作為返回值,盡量不創建節點

class Solution {
public:TreeNode* judge(TreeNode*root1,TreeNode*root2){if(root1==nullptr && root2==nullptr) return nullptr;if(root1!=nullptr && root2!=nullptr){root1->val+=root2->val;root1->left=judge(root1->left,root2->left);root1->right=judge(root1->right,root2->right);} else if(root1==nullptr && root2!=nullptr){TreeNode*newNode=new TreeNode();newNode->val=root2->val;newNode->left=judge(nullptr,root2->left);newNode->right=judge(nullptr,root2->right);return newNode;} return root1;}TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//思路:直接同時遍歷兩個二叉樹,子節點不存在傳入下一個為空指針if(root1==nullptr) return root2;if(root2==nullptr) return root1;if(root1==nullptr && root2==nullptr) return nullptr;root1->val+=root2->val;root1->left=judge(root1->left,root2->left);root1->right=judge(root1->right,root2->right);return root1;}
};

700.二叉搜索樹中的搜索

思路:判斷大小,搜索
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {//思路:找到節點,然后返回//分析:左子節點比父節點小,右子節點比父節點大if(root==nullptr)return root;TreeNode*newNode=root;;if(newNode->val>val)newNode=searchBST(newNode->left,val);else if(newNode->val<val)newNode=searchBST(newNode->right,val);return newNode;}
};

98.驗證二叉搜素樹

思考:從二叉搜索樹的特性入手,二叉搜索樹的中序遍歷必然是遞增序列
分析:細節方面很要注意
class Solution {
public:vector<int>ans;void judge(TreeNode*root){if(root==nullptr) return;judge(root->left);ans.push_back(root->val);judge(root->right);}bool isValidBST(TreeNode* root) {//思路:直接分析//思路二:中序遍歷的數組一定遞增judge(root);if(ans.size()==1) return true;int pre=ans[0];for(int i=1;i<ans.size();i++){if(ans[i]<=pre)return false;pre=ans[i];}return true;}
};

530.二叉搜索樹的最小絕對差

思路:把所有節點加入數組,排序后兩兩計算最小差值
class Solution {
public:vector<int>ans;void judge(TreeNode*root){if(root==nullptr) return;ans.push_back(root->val);judge(root->left);judge(root->right);}int getMinimumDifference(TreeNode* root) {//思路:把父節點的值傳入子節點,然后更新最小差值//問題:題目要求是任意節點,所以考慮先加入數組,排序后兩兩計算judge(root);sort(ans.begin(),ans.end());int minSub=INT_MAX;for(int i=1;i<ans.size();i++){int mid=abs(ans[i-1]-ans[i]);minSub=min(minSub,mid);}return minSub;}
};

501.二叉搜索樹中的眾數

分析:眾數就是出現多次的數
思路:使用哈希表,遞歸遍歷所有節點
class Solution {
public:vector<int>res;unordered_map<int,int>map;void judge(TreeNode*root){if(root==nullptr)return;map[root->val]++;//記錄出現的次數judge(root->left);judge(root->right);}vector<int> findMode(TreeNode* root) {judge(root);int maxNum=0;for(auto it:map){//第一次遍歷獲取出現最大頻率if(it.second>maxNum) maxNum=it.second;}for(auto it:map){//找到眾數if(it.second==maxNum) res.push_back(it.first);}return res;}
};

236.二叉樹的最近公共樹祖先

思路一:通過左0右1獲取兩個節點的遍歷路徑,然后截取兩個節點相同的遍歷路徑,使用相同的遍歷路徑直接獲得最近公共樹祖先
class Solution {
public:string midP="",midQ="";void judge(TreeNode*root,string judgeDist,TreeNode*p,TreeNode*q,string midP1,string midQ1){if(root==nullptr)  return;midP1+=judgeDist;midQ1+=judgeDist;if(root==p) midP=midP1;if(root==q) midQ=midQ1;judge(root->left,"0",p,q,midP1,midQ1);judge(root->right,"1",p,q,midP1,midQ1); }TreeNode*search(TreeNode*root,queue<char> mid,int start){TreeNode*cur;if(mid.size()==0)return root;//分兩種情況if(mid.front()=='1'){mid.pop();cur=search(root->right,mid,start+1);} else{mid.pop();cur=search(root->left,mid,start+1);}  return cur;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//思路:遍歷二叉樹,給左右子節點分別編號,找到兩個節點之后匹配編號的相同位數,//然后用相同位數走到的那個節點就是最近公共祖先int i;queue<char>que;judge(root,"",p,q,"","");//cout<<midP.size()<<midQ.size();for(i=0;i<midP.size();i++){if(midP[i]!=midQ[i]) break;elseque.push(midP[i]);}//cout<<1;if(i==0) return root;string mid=midP.substr(0,i);cout<<mid.size()<<endl;return search(root,que,0);}
};

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

思路一:比較出節點值大小,然后從根節點開始判斷兩個節點的位置
class Solution {
public:TreeNode* judge(TreeNode*root,TreeNode*first,TreeNode*second){//祖先節點在當前root上或者兩個節點在當前root的兩邊if((first->val<=root->val && second->val>root->val) || (first->val<root->val && second->val>=root->val)) return root;TreeNode*res;//當前兩個節點在同一邊if(first->val<root->val && second->val<root->val)res=judge(root->left,first,second);else if(first->val>root->val && second->val>root->val)res=judge(root->right,first,second);return res;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//思路:找到一個在兩個節點中間的節點,或者等于較小值//比較出最小值if(p->val>q->val) return judge(root,q,p);return judge(root,p,q);}
};

701.二叉搜索樹的插入操作

思路一:直接遍歷插入
class Solution {
public:void judge(TreeNode*root,int val){if(root->val>val){//需要插入左邊if(root->left) judge(root->left,val);else{TreeNode*newNode=new TreeNode(val);root->left=newNode;}}else{//需要插入右邊if(root->right) judge(root->right,val);else{TreeNode*newNode=new TreeNode(val);root->right=newNode;}}}TreeNode* insertIntoBST(TreeNode* root, int val) {if(root==nullptr){//考慮沒有節點的情況return new TreeNode(val);}judge(root,val);return root;}
};

450.刪除二叉搜索樹的節點

分析:這題做的好復雜,感覺饒了很多彎子,100多行居然還超過了68%哈哈哈哈哈
思路一:
????????????????1.考慮特殊情況,根節點不存在和要刪除根節點。
? ? ? ? ? ? ? ? 2.考慮二叉樹中沒有要刪除的節點。
? ? ? ? ? ? ? ? 3.遞歸遍歷尋找left,或者right是否為要刪除的節點,當找到時,將root和要刪除的子節點傳入res刪除函數,其中變量judgeB判斷是左子節點還是右子節點。
? ? ? ? ? ? ? ? 4.在刪除節點時,需要判斷該節點是否有左右子節點,都有的情況下需要使用add函數,將要刪除的節點的左子節點放到右子節點的下面。使用add遞歸添加
class Solution {
public:bool judgeA=false;void add(TreeNode*root,TreeNode*node){//用于刪除節點時,組合該節點的兩個子節點if(node==nullptr) return;if(root->val>node->val){//插入節點在左邊if(root->left)add(root->left,node);elseroot->left=node;}else{//插入節點在右邊if(root->right)add(root->right,node);elseroot->right=node;}}void res(TreeNode*root,TreeNode*node, bool judgeB){//用于刪除節點if(judgeB)//左子節點{if(node->left==nullptr && node->right==nullptr){//key值節點為葉子節點root->left=nullptr;return;}else if(node->left && node->right){//key值節點有左右節點root->left=node->right;add(node->right,node->left);return;}else if(node->left && !node->right)root->left=node->left;elseroot->left=node->right;}else{if(node->left==nullptr && node->right==nullptr){//key值節點為葉子節點root->right=nullptr;return;}else if(node->left && node->right){//key值節點有左右節點root->right=node->right;add(node->right,node->left);return;}else if(node->left && !node->right)root->right=node->left;elseroot->right=node->right;}}void judge(TreeNode*root,int key){//用于查找刪除節點if(root==nullptr)return;if(root->val>key){//當父節點大于key,說明key在左邊if(root->left->val==key){//當左子節點等于key時res(root,root->left,true);}elsejudge(root->left,key);}else if(root->val<key){if(root->right->val==key){res(root,root->right,false);}elsejudge(root->right,key);}}void judgeMax(TreeNode*root,int key){//用于判斷二叉樹中是否存在目標節點if(root==nullptr) return;if(root->val==key) judgeA=true;if(root->val>key) judgeMax(root->left,key);if(root->val<key) judgeMax(root->right,key);}TreeNode* deleteNode(TreeNode* root, int key) {//思路:遍歷二叉樹,找到節點時,判斷當前節點左右兩邊情況//if(root==nullptr) return root;if(root->val==key){if(root->left && root->right){add(root->right,root->left);return root->right;}else if(root->left) return root->left;else if(root->right) return root->right;elsereturn nullptr;}judgeMax(root,key);if(judgeA==false){cout<<123;return root;} judge(root,key);return root;}
};

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

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

相關文章

Springboot 實踐(1)MyEclipse2019創建maven工程

項目講解步驟&#xff0c;基于本機已經正確安裝Java 1.8.0及MyEclipse2019的基礎之上&#xff0c;Java及MyEclipse的安裝&#xff0c;請參考其他相關文檔&#xff0c;Springboot 實踐文稿不再贅述。項目創建講解馬上開始。 一、首先打開MyEclipse2019&#xff0c;進入工作空間選…

Linux系統下安裝Git軟件

環境說明 Linux系統&#xff1a;CentOS 7.9 安裝GCC等 JDK版本&#xff1a;jdk-8u202-linux-x64.tar.gz Maven版本&#xff1a;apache-maven-3.8.8-bin.tar.gz 在以上環境下安裝Git&#xff08;git-2.41.0.tar.gz&#xff09;軟件。 查看是否安裝Git軟件 查看Git版本&#…

如何建設指標管理平臺,實現企業運營效率提升

隨著企業數字化轉型的深入推進&#xff0c;建設指標管理平臺已經成為企業數字化轉型的重要組成部分。 建設指標管理平臺可以幫助企業更好地了解業務數據和業務指標&#xff0c;實現數據可視化和智能化分析&#xff0c;提高企業的決策效率和管理水平。 在過去&#xff0c;企業通…

【深入了解PyTorch】PyTorch分布式訓練:多GPU、數據并行與模型并行

【深入了解PyTorch】PyTorch分布式訓練:多GPU、數據并行與模型并行 PyTorch分布式訓練:多GPU、數據并行與模型并行1. 分布式訓練簡介2. 多GPU訓練3. 數據并行4. 模型并行5. 總結PyTorch分布式訓練:多GPU、數據并行與模型并行 在深度學習領域,模型的復雜性和數據集的巨大規…

最小路徑和——力扣64

文章目錄 題目描述動態規劃題目描述 動態規劃 class Solution {public:int minPathSum(vector<vector<int>>

Python爬蟲(十一)_案例:使用正則表達式的爬蟲

本章將結合先前所學的爬蟲和正則表達式知識&#xff0c;做一個簡單的爬蟲案例&#xff0c;更多內容請參考:Python學習指南 現在擁有了正則表達式這把神兵利器&#xff0c;我們就可以進行對爬取到的全部網頁源代碼進行篩選了。 下面我們一起嘗試一下爬取內涵段子網站&#xff1…

stm32 cubemx can通訊(3)bsp_can

文章目錄 前言一、bspbsp_can.hbsp_can.c 二、如何使用總結 前言 stm32 cubemx can通訊&#xff08;1&#xff09;回環模式 stm32 cubemx can通訊&#xff08;2&#xff09;過濾器設置說明代碼分析 根據前兩篇文章已經能夠實現can標準幀的收發&#xff0c;但是調用的函數沒有標…

2023年國賽數學建模思路 - 案例:異常檢測

文章目錄 賽題思路一、簡介 -- 關于異常檢測異常檢測監督學習 二、異常檢測算法2. 箱線圖分析3. 基于距離/密度4. 基于劃分思想 建模資料 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、簡介 – 關于異常…

軟考高級之系統架構師之數據通信與計算機網絡

概念 OSPF 在劃分區域之后&#xff0c;OSPF網絡中的非主干區域中的路由器對于到外部網絡的路由&#xff0c;一定要通過ABR(區域邊界路由器)來轉發&#xff0c;既然如此&#xff0c;對于區域內的路由器來說&#xff0c;就沒有必要知道通往外部網絡的詳細路由&#xff0c;只要由…

保持城市天際線(力扣)貪心 JAVA

給你一座由 n x n 個街區組成的城市&#xff0c;每個街區都包含一座立方體建筑。給你一個下標從 0 開始的 n x n 整數矩陣 grid &#xff0c;其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 高度 。 城市的 天際線 是從遠處觀察城市時&#xff0c;所有建筑物形成的外部輪廓。…

html2canvas生成圖片地址Base64格式轉成blob在轉成file(二進制)可正常發送(保姆教程,復制粘貼可用)

開始: 最終結果: 1. html2canvas方法生成的圖片地址已Base64編碼形式放在img標簽src中可直接展示生成的圖片(注意頁面標簽獲取位置,還有個setTimeout頁面渲染需要時間) setTimeout(function () {var result {};v…

Python 使用Hadoop 3 之HDFS 總結

Hadoop 概述 Hadoop 是一個由Apache 軟件基金會開發的分布式基礎架構。用戶可以在不了解分布式底層細節的情況下&#xff0c;開發分布式程序&#xff0c;充分利用集群的威力進行高速運算和存儲。 Hadoop 實現一個分布式文件系統&#xff08;Hadoop Distributed File Sy…

Python爬蟲——selenium_交互

交互&#xff1a; 點擊&#xff1a;button.click() 輸入&#xff1a;inputs.send_keys() 后退操作&#xff1a;browser.back() 前進操作&#xff1a;browser.forword() 模擬js滾動&#xff1a;browser. js_bottom document.documentElement.scrollTop100000 browser.execute_…

將本地項目上傳至gitee的詳細步驟

將本地項目上傳至gitee的詳細步驟 1.在gitee上創建以自己項目名稱命名的空項目2.進入想上傳的項目的文件夾&#xff0c;然后右鍵點擊3. 初始化本地環境&#xff0c;把該項目變成可被git管理的倉庫4.添加該項目下的所有文件5.使用如下命令將文件添加到倉庫中去6.將本地代碼庫與遠…

Stable Diffusion 插件開發基礎講解

近來Stable diffusion擴散網絡大熱,跟上時代,簡單的文生圖,圖生圖,其實可以滿足絕大多數設計師的應用,但是有什么是賽博畫手無法做到的呢? 那就是他們使用到的stable diffusion的插件開發,他們并不清楚stable diffusino的代碼結構,如果遇到一些代碼層面的報錯問題,他們…

生信豆芽菜-單基因KM曲線

網址&#xff1a;http://www.sxdyc.com/panCancerKMCurve 該工具主要用于查看單基因在泛癌組織中&#xff0c;高低表達的預后情況&#xff0c;這里可以選擇合適的截斷值&#xff0c;比如最佳截斷&#xff0c;中位值&#xff0c;平均值&#xff0c;當然也可以自己輸入&#xff0…

基于長短期神經網絡的客流量預測,基于長短期神經網絡的超短期客流量預測,lstm詳細原理

目錄 背影 摘要 LSTM的基本定義 LSTM實現的步驟 基于長短期神經網絡LSTM的客流量預測 完整代碼: 基于長短期神經網絡LSTM的公交站客流量預測資源-CSDN文庫 https://download.csdn.net/download/abc991835105/88184734 效果圖 結果分析 展望 參考論文 背影 碳排放越來越受到重…

java將字符串中文轉為拼音

可以使用第三方庫來實現中文轉拼音的功能&#xff0c;比如使用pinyin4j這個庫。 首先&#xff0c;需要將pinyin4j庫添加到項目的依賴中。可以通過Maven或者Gradle來添加依賴。 對于Maven&#xff0c;可以在pom.xml文件中添加以下代碼&#xff1a; <dependency><group…

原生信息流廣告特點,如何幫APP開發者增加變現收益?

簡單來說&#xff1a;原生廣告&#xff0c;就是把廣告片和賬號&#xff0c;一起用消耗推流的買量模式&#xff0c;一同投放出去。 用戶看到的廣告/內容&#xff0c;與原生視頻沒有差別——用戶可以點頭像關注、也可以查看賬號歷史信息。原生廣告本質&#xff0c;是顯得真實、原…

聊一聊Sentinel背后的原理

Sentinel簡介 Sentinel是阿里開源的一款面向分布式、多語言異構化服務架構的流量治理組件。 主要以流量為切入點&#xff0c;從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性。 上面兩句話來自Sentin…