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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

LeetCode 865. 具有所有最深结点的最小子树(递归)

發(fā)布時(shí)間:2024/7/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 865. 具有所有最深结点的最小子树(递归) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 題目

給定一個(gè)根為 root 的二叉樹(shù),每個(gè)結(jié)點(diǎn)的深度是它到根的最短距離。

如果一個(gè)結(jié)點(diǎn)在整個(gè)樹(shù)的任意結(jié)點(diǎn)之間具有最大的深度,則該結(jié)點(diǎn)是最深的。

一個(gè)結(jié)點(diǎn)的子樹(shù)是該結(jié)點(diǎn)加上它的所有后代的集合。

返回能滿足“以該結(jié)點(diǎn)為根的子樹(shù)中包含所有最深的結(jié)點(diǎn)”這一條件的具有最大深度的結(jié)點(diǎn)。

示例: 輸入:[3,5,1,6,2,0,8,null,null,7,4] 輸出:[2,7,4] 解釋: 我們返回值為 2 的結(jié)點(diǎn),在圖中用黃色標(biāo)記。 在圖中用藍(lán)色標(biāo)記的是樹(shù)的最深的結(jié)點(diǎn)。 輸入 "[3, 5, 1, 6, 2, 0, 8, null, null, 7, 4]" 是對(duì)給定的樹(shù)的序列化表述。 輸出 "[2, 7, 4]" 是對(duì)根結(jié)點(diǎn)的值為 2 的子樹(shù)的序列化表述。 輸入和輸出都具有 TreeNode 類型。提示: 樹(shù)中結(jié)點(diǎn)的數(shù)量介于 1500 之間。 每個(gè)結(jié)點(diǎn)的值都是獨(dú)一無(wú)二的。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/smallest-subtree-with-all-the-deepest-nodes
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

類似的題:LeetCode 1123. 最深葉節(jié)點(diǎn)的最近公共祖先(遞歸比較子樹(shù)高度)
跟鏈接的題是一個(gè)意思,表述不太一樣。

class Solution { public:TreeNode* subtreeWithAllDeepest(TreeNode* root) {if(!root)return NULL;int hl = height(root->left);int hr = height(root->right);if(hl == hr)return root;else if(hl < hr)return subtreeWithAllDeepest(root->right);elsereturn subtreeWithAllDeepest(root->left);}int height(TreeNode* root){if(!root)return 0;return 1+max(height(root->left),height(root->right));} };

上面解法,有很多冗余的重復(fù)遍歷

  • 優(yōu)化
class Solution { public:TreeNode* subtreeWithAllDeepest(TreeNode* root) {return dfs(root).second;}pair<int, TreeNode*> dfs(TreeNode* root)//返回深度,節(jié)點(diǎn){if(!root)return {0, NULL};pair<int, TreeNode*> l = dfs(root->left);pair<int, TreeNode*> r = dfs(root->right);if(l.first == r.first)//左右高度一樣,返回當(dāng)前root,深度返回時(shí)都要+1return {l.first+1, root};else if(l.first > r.first)return {l.first+1, l.second};//左邊高,返回左邊找到的節(jié)點(diǎn)elsereturn {r.first+1, r.second};} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 865. 具有所有最深结点的最小子树(递归)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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