chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么就能構(gòu)造成二叉樹(shù)呢?

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:代碼隨想錄 ? 作者:代碼隨想錄 ? 2022-07-14 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

經(jīng)常有錄友問(wèn),二叉樹(shù)的題目中輸入用例,在ACM模式下應(yīng)該怎么構(gòu)造呢?

力扣上的題目,輸入用例就給了一個(gè)數(shù)組,怎么就能構(gòu)造成二叉樹(shù)呢?

這次就給大家好好講一講!

就拿最近公眾號(hào)上 二叉樹(shù)的打卡題目來(lái)說(shuō):

538.把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)

其輸入用例,就是用一個(gè)數(shù)組來(lái)表述 二叉樹(shù),如下:

768cf948-0323-11ed-ba43-dac502259ad0.png

一直跟著公眾號(hào)學(xué)算法的錄友 應(yīng)該知道,我在二叉樹(shù):構(gòu)造二叉樹(shù)登場(chǎng)!,已經(jīng)講過(guò),只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹(shù)。前序和后序是不能確定唯一的二叉樹(shù)的。

那么538.把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)的示例中,為什么,一個(gè)序列(數(shù)組或者是字符串)就可以確定二叉樹(shù)了呢?

很明顯,是后臺(tái)直接明確了構(gòu)造規(guī)則。

再看一下 這個(gè) 輸入序列 和 對(duì)應(yīng)的二叉樹(shù)。768cf948-0323-11ed-ba43-dac502259ad0.png

從二叉樹(shù) 推導(dǎo)到 序列,大家可以發(fā)現(xiàn)這就是層序遍歷。

但從序列 推導(dǎo)到 二叉樹(shù),很多同學(xué)就看不懂了,這得怎么轉(zhuǎn)換呢。

我在關(guān)于二叉樹(shù),你該了解這些!已經(jīng)詳細(xì)講過(guò),二叉樹(shù)可以有兩種存儲(chǔ)方式,一種是 鏈?zhǔn)酱鎯?chǔ),另一種是順序存儲(chǔ)。

鏈?zhǔn)酱鎯?chǔ),就是大家熟悉的二叉樹(shù),用指針指向左右孩子。

順序存儲(chǔ),就是用一個(gè)數(shù)組來(lái)存二叉樹(shù),其方式如圖所示:

76b93ed6-0323-11ed-ba43-dac502259ad0.png

那么此時(shí)大家是不是應(yīng)該知道了,數(shù)組如何轉(zhuǎn)化成 二叉樹(shù)了。如果父節(jié)點(diǎn)的數(shù)組下標(biāo)是i,那么它的左孩子下標(biāo)就是i * 2 + 1,右孩子下標(biāo)就是 i * 2 + 2。

那么這里又有同學(xué)疑惑了,這些我都懂了,但我還是不知道 應(yīng)該 怎么構(gòu)造。

來(lái),咱上代碼。昨天晚上 速度敲了一遍實(shí)現(xiàn)代碼。

具體過(guò)程看注釋?zhuān)?/p>

//根據(jù)數(shù)組構(gòu)造二叉樹(shù)
TreeNode*construct_binary_tree(constvector<int>&vec){
vectorvecTree(vec.size(),NULL);
TreeNode*root=NULL;
//把輸入數(shù)值數(shù)組,先轉(zhuǎn)化為二叉樹(shù)節(jié)點(diǎn)數(shù)組
for(inti=0;iNULL;
if(vec[i]!=-1)node=newTreeNode(vec[i]);//數(shù)組中用-1表示null
vecTree[i]=node;
if(i==0)root=node;
}
//遍歷一遍,根據(jù)規(guī)則左右孩子賦值就可以了
//注意這里結(jié)束規(guī)則是i*2+2
for(inti=0;i*2+2if(vecTree[i]!=NULL){
//線(xiàn)性存儲(chǔ)轉(zhuǎn)連式存儲(chǔ)關(guān)鍵邏輯
vecTree[i]->left=vecTree[i*2+1];
vecTree[i]->right=vecTree[i*2+2];
}
}
returnroot;
}

這個(gè)函數(shù)最后返回的 指針就是 根節(jié)點(diǎn)的指針, 這就是 傳入二叉樹(shù)的格式了,也就是 力扣上的用例輸入格式,如圖:

76cd1ece-0323-11ed-ba43-dac502259ad0.png

也有不少同學(xué)在做ACM模式的題目,就經(jīng)常疑惑:

  • 讓我傳入數(shù)值,我會(huì)!
  • 讓我傳入數(shù)組,我會(huì)!
  • 讓我傳入鏈表,我也會(huì)!
  • 讓我傳入二叉樹(shù),我懵了,啥?傳入二叉樹(shù)?二叉樹(shù)怎么傳?

其實(shí)傳入二叉樹(shù),就是傳入二叉樹(shù)的根節(jié)點(diǎn)的指針,和傳入鏈表都是一個(gè)邏輯。

這種現(xiàn)象主要就是大家對(duì)ACM模式過(guò)于陌生,說(shuō)實(shí)話(huà),ACM模式才真正的考察代碼能力(注意不是算法能力),而 力扣的核心代碼模式 總有一種 不夠徹底的感覺(jué)。

所以,如果大家對(duì)ACM模式不夠了解,一定要多去練習(xí)!

那么以上的代碼,我們根據(jù)數(shù)組構(gòu)造二叉樹(shù),接來(lái)下我們?cè)?把 這個(gè)二叉樹(shù)打印出來(lái),看看是不是 我們輸入的二叉樹(shù)結(jié)構(gòu),這里就用到了層序遍歷,我們?cè)?a href="http://m.brongaenegriffin.com/outside?redirect=https://mp.weixin.qq.com/s?__biz=MzUxNjY5NTYxNA==&mid=2247491416&idx=1&sn=1a99afc9cb150f889f8005e0cc63c5fe&scene=21#wechat_redirect" target="_blank">二叉樹(shù):層序遍歷登場(chǎng)!中講過(guò)。

完整測(cè)試代碼如下:

#include
#include
#include
usingnamespacestd;

structTreeNode{
intval;
TreeNode*left;
TreeNode*right;
TreeNode(intx):val(x),left(NULL),right(NULL){}
};

//根據(jù)數(shù)組構(gòu)造二叉樹(shù)
TreeNode*construct_binary_tree(constvector<int>&vec){
vectorvecTree(vec.size(),NULL);
TreeNode*root=NULL;
for(inti=0;iNULL;
if(vec[i]!=-1)node=newTreeNode(vec[i]);
vecTree[i]=node;
if(i==0)root=node;
}
for(inti=0;i*2+2if(vecTree[i]!=NULL){
vecTree[i]->left=vecTree[i*2+1];
vecTree[i]->right=vecTree[i*2+2];
}
}
returnroot;
}

//層序打印打印二叉樹(shù)
voidprint_binary_tree(TreeNode*root){
queueque;
if(root!=NULL)que.push(root);
vector<vector<int>>result;
while(!que.empty()){
intsize=que.size();
vector<int>vec;
for(inti=0;iif(node!=NULL){
vec.push_back(node->val);
que.push(node->left);
que.push(node->right);
}
//這里的處理邏輯是為了把null節(jié)點(diǎn)打印出來(lái),用-1表示null
elsevec.push_back(-1);
}
result.push_back(vec);
}
for(inti=0;ifor(intj=0;jcout<"";
}
cout<endl;
}
}

intmain(){
//注意本代碼沒(méi)有考慮輸入異常數(shù)據(jù)的情況
//用-1來(lái)表示null
vector<int>vec={4,1,6,0,2,5,7,-1,-1,-1,3,-1,-1,-1,8};
TreeNode*root=construct_binary_tree(vec);
print_binary_tree(root);
}

可以看出我們傳入的數(shù)組是:{4,1,6,0,2,5,7,-1,-1,-1,3,-1,-1,-1,8} , 這里是用 -1 來(lái)表示null,

538.把二叉搜索樹(shù)轉(zhuǎn)換為累加樹(shù)中的輸入是一樣的

768cf948-0323-11ed-ba43-dac502259ad0.png

這里可能又有同學(xué)疑惑,你這不一樣啊,題目是null,你為啥用-1。

用-1 表示null為了方便舉例,如果非要和 力扣輸入一樣一樣的,就是簡(jiǎn)單的字符串處理,把null 替換為 -1 就行了。

在來(lái)看,測(cè)試代碼輸出的效果:

76ef3fae-0323-11ed-ba43-dac502259ad0.png

可以看出和 題目中輸入用例 這個(gè)圖 是一樣一樣的。只不過(guò)題目中圖沒(méi)有把 空節(jié)點(diǎn) 畫(huà)出來(lái)而已。

7747e866-0323-11ed-ba43-dac502259ad0.png

大家可以拿我的代碼去測(cè)試一下,跑一跑。

注意:我的測(cè)試代碼,并沒(méi)有處理輸入異常的情況(例如輸入空數(shù)組之類(lèi)的),處理各種輸入異常,大家可以自己去練練。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二叉樹(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    12992
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27450

原文標(biāo)題:不懂就問(wèn)!

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    詳解芯片燒錄設(shè)備的內(nèi)部構(gòu)造

    本文拆解燒錄器,揭秘其內(nèi)部構(gòu)造:底板含多級(jí)隔離電源與屏蔽接口區(qū);主控板作為核心,搭載高性能 MCU、存儲(chǔ)芯片型號(hào)庫(kù);驅(qū)動(dòng)板通過(guò)驅(qū)動(dòng)芯片和可更換 Pin Card 適配不同芯片;自動(dòng)化機(jī)型還有高精度機(jī)械執(zhí)行機(jī)構(gòu);散熱與屏蔽設(shè)計(jì)保障穩(wěn)定。理解構(gòu)造可助力故障排查與保養(yǎng),文末邀讀
    的頭像 發(fā)表于 03-24 16:08 ?593次閱讀

    樹(shù)科技,IPO申請(qǐng)獲受理

    電子發(fā)燒友網(wǎng)綜合報(bào)道 3月20日,上交所網(wǎng)站顯示,宇樹(shù)科技股份有限公司科創(chuàng)板IPO申請(qǐng)已受理,成為又一家科創(chuàng)板IPO“預(yù)先審閱”落地項(xiàng)目。此次IPO,宇樹(shù)科技擬募資42.02億元。 ? 招股書(shū)顯示
    的頭像 發(fā)表于 03-20 18:33 ?4170次閱讀
    宇<b class='flag-5'>樹(shù)</b>科技,IPO申請(qǐng)獲受理

    Linux設(shè)備樹(shù)到底是啥?一張圖看懂硬件適配的「翻譯官」

    你有沒(méi)有想過(guò):同一份 Linux 內(nèi)核鏡像,為啥能在不同型號(hào)的開(kāi)發(fā)板上跑起來(lái)?比如一塊 ARM 架構(gòu)的開(kāi)發(fā)板,今天換個(gè)顯示屏、明天加個(gè)傳感器,內(nèi)核不用重新編譯就能識(shí)別新硬件 —— 這背后,設(shè)備樹(shù)(Devicetree) 功不可沒(méi)。
    的頭像 發(fā)表于 02-09 17:01 ?1263次閱讀
    Linux設(shè)備<b class='flag-5'>樹(shù)</b>到底是啥?一張圖看懂硬件適配的「翻譯官」

    入門(mén)宇樹(shù)機(jī)器人開(kāi)發(fā):從SDK源碼探索到實(shí)戰(zhàn)操作

    樹(shù)機(jī)器人(Unitree)作為全球領(lǐng)先的四足機(jī)器人研發(fā)企業(yè),其推出的unitree_sdk2是面向旗下 Go2、H1、B2 等系列機(jī)器人的第代軟件開(kāi)發(fā)工具包。該 SDK 提供了豐富的接口和示例代碼,支持開(kāi)發(fā)者快速實(shí)現(xiàn)機(jī)器人控制、狀態(tài)獲取、傳感器數(shù)據(jù)處理等功能,是入門(mén)宇
    的頭像 發(fā)表于 02-06 16:43 ?3321次閱讀
    入門(mén)宇<b class='flag-5'>樹(shù)</b>機(jī)器人開(kāi)發(fā):從SDK源碼探索到實(shí)戰(zhàn)操作

    TüV萊茵與杭集團(tuán)達(dá)成戰(zhàn)略合作并頒發(fā)歐盟CE-MD符合性證書(shū)

    日前,國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國(guó)萊茵TüV大中華區(qū)(簡(jiǎn)稱(chēng)"TüV萊茵")與杭集團(tuán)股份有限公司(簡(jiǎn)稱(chēng)"杭集團(tuán)")簽署了戰(zhàn)略合作協(xié)議,標(biāo)志著雙方
    的頭像 發(fā)表于 01-15 12:18 ?422次閱讀

    無(wú)線(xiàn)傾角傳感器在古樹(shù)監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全

    無(wú)線(xiàn)傾角傳感器在古樹(shù)監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全
    的頭像 發(fā)表于 01-09 11:38 ?757次閱讀
    無(wú)線(xiàn)傾角傳感器在古<b class='flag-5'>樹(shù)</b>監(jiān)測(cè)中的應(yīng)用:以科技守護(hù)活文物的結(jié)構(gòu)安全

    億緯鋰能與杭集團(tuán)達(dá)成戰(zhàn)略合作

    近日,億緯鋰能與杭集團(tuán)2025年戰(zhàn)略研討會(huì)暨戰(zhàn)略合作協(xié)議簽約儀式在杭州舉行。億緯鋰能副總裁、商用車(chē)電池產(chǎn)品線(xiàn)總裁江吉兵博士,億緯鋰能商用車(chē)電池產(chǎn)品線(xiàn)國(guó)內(nèi)銷(xiāo)售部總經(jīng)理井振江,杭集團(tuán)董事、副總經(jīng)理兼
    的頭像 發(fā)表于 01-04 18:18 ?1168次閱讀

    通過(guò)優(yōu)化代碼來(lái)提高M(jìn)CU運(yùn)行效率

    選擇時(shí)間復(fù)雜度低的算法。 根據(jù)訪(fǎng)問(wèn)模式選擇數(shù)據(jù)結(jié)構(gòu)。頻繁查找用哈希表,有序數(shù)據(jù)用二叉樹(shù)等。 查表法:對(duì)于復(fù)雜的數(shù)學(xué)計(jì)算(如sin, log),或者協(xié)議解析,預(yù)先計(jì)算好結(jié)果存于數(shù)組中,用空間換時(shí)間
    發(fā)表于 11-12 08:21

    蜂鳥(niǎo)E203內(nèi)核中斷管理模塊sirv_plic_man代碼分析

    。 上面的代碼生成一個(gè)二叉樹(shù)結(jié)構(gòu)來(lái)比較和選擇具有最大優(yōu)先級(jí)的掛起中斷源及其ID。樹(shù)狀結(jié)構(gòu)由級(jí)聯(lián)比較器組成,每一層的比較器數(shù)量是前一層的一半。在樹(shù)的每一層,選擇優(yōu)先級(jí)最高的中斷并傳遞到下一層,直到只剩下
    發(fā)表于 10-23 06:05

    請(qǐng)問(wèn)rtt studio 的文件夾打紅什么意思?

    rtt studio 的文件夾打紅什么意思?而且文件夾里面實(shí)際是有文件的,但是瀏覽不出來(lái)。
    發(fā)表于 09-18 06:34

    樹(shù)科技,被起訴

    電子發(fā)燒友網(wǎng)綜合報(bào)道 天眼查顯示,近日,杭州宇樹(shù)科技股份有限公司(以下簡(jiǎn)稱(chēng)“宇樹(shù)科技”)新增1條開(kāi)庭公告,原告為杭州露韋美日化有限公司(以下簡(jiǎn)稱(chēng)“露韋美日化”),案由為侵害發(fā)明專(zhuān)利權(quán)糾紛,該案將于8
    的頭像 發(fā)表于 08-26 07:50 ?5133次閱讀
    宇<b class='flag-5'>樹(shù)</b>科技,被起訴

    億緯鋰能榮獲杭集團(tuán)2022-2024年度優(yōu)秀供應(yīng)商獎(jiǎng)

    近日,億緯鋰能憑借卓越產(chǎn)品、可靠交付與優(yōu)質(zhì)服務(wù)榮獲杭集團(tuán)頒發(fā)的“2022-2024年度優(yōu)秀供應(yīng)商”獎(jiǎng)。杭集團(tuán)副總經(jīng)理兼杭電器董事長(zhǎng)金華曙、杭電器總經(jīng)理兼杭博電機(jī)總經(jīng)理李明輝出席
    的頭像 發(fā)表于 07-15 09:00 ?1092次閱讀

    一文讀懂三相變壓器的構(gòu)造和工作原理

    與維護(hù)管理,也能讓相關(guān)從業(yè)者和學(xué)者對(duì)其內(nèi)在運(yùn)行機(jī)制有更清晰的認(rèn)識(shí)。那么,三相變壓器究竟是如何構(gòu)造的,又遵循怎樣的工作原理?以下是三相變壓器的構(gòu)造及工作原理的詳細(xì)介紹:
    的頭像 發(fā)表于 07-10 15:19 ?2569次閱讀
    一文讀懂三相變壓器的<b class='flag-5'>構(gòu)造</b>和工作原理

    千方科技推出AI大模型公路構(gòu)造物評(píng)定系統(tǒng)

    公路構(gòu)造物(橋梁、隧道、涵洞等)檢測(cè)評(píng)定是養(yǎng)護(hù)管理的核心環(huán)節(jié),通過(guò)量化構(gòu)造物的技術(shù)狀況評(píng)定等級(jí),可為養(yǎng)護(hù)資源分配決策提供技術(shù)支持。傳統(tǒng)公路構(gòu)造物技術(shù)狀況評(píng)定面臨“三座大山”:一是評(píng)定結(jié)果易受人
    的頭像 發(fā)表于 07-09 15:54 ?1108次閱讀

    看點(diǎn):投資方:宇樹(shù)科技或于科創(chuàng)板IPO 美媒:亞馬遜機(jī)器人數(shù)量接近人類(lèi)員工 英偉達(dá)股價(jià)創(chuàng)新高

    給大家?guī)?lái)一些行業(yè)資訊: 投資方:宇樹(shù)科技或于科創(chuàng)板IPO 早在2025年的5月29日,宇樹(shù)科技就正式發(fā)布通知稱(chēng),因公司發(fā)展需要,杭州宇樹(shù)科技有限公司即日起名稱(chēng)變更為“杭州宇樹(shù)科技股份
    的頭像 發(fā)表于 07-04 15:08 ?915次閱讀