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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

就拿最近公眾號上 二叉樹的打卡題目來說:

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

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

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

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

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

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

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

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

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

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

鏈?zhǔn)酱鎯?,就是大家熟悉的二叉樹,用指針指向左右孩子?/p>

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

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

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

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

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

具體過程看注釋:

//根據(jù)數(shù)組構(gòu)造二叉樹
TreeNode*construct_binary_tree(constvector<int>&vec){
vectorvecTree(vec.size(),NULL);
TreeNode*root=NULL;
//把輸入數(shù)值數(shù)組,先轉(zhuǎn)化為二叉樹節(jié)點數(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){
//線性存儲轉(zhuǎn)連式存儲關(guān)鍵邏輯
vecTree[i]->left=vecTree[i*2+1];
vecTree[i]->right=vecTree[i*2+2];
}
}
returnroot;
}

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

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

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

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

其實傳入二叉樹,就是傳入二叉樹的根節(jié)點的指針,和傳入鏈表都是一個邏輯。

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

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

那么以上的代碼,我們根據(jù)數(shù)組構(gòu)造二叉樹,接來下我們在 把 這個二叉樹打印出來,看看是不是 我們輸入的二叉樹結(jié)構(gòu),這里就用到了層序遍歷,我們在二叉樹:層序遍歷登場!中講過。

完整測試代碼如下:

#include
#include
#include
usingnamespacestd;

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

//根據(jù)數(shù)組構(gòu)造二叉樹
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;
}

//層序打印打印二叉樹
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é)點打印出來,用-1表示null
elsevec.push_back(-1);
}
result.push_back(vec);
}
for(inti=0;ifor(intj=0;jcout<"";
}
cout<endl;
}
}

intmain(){
//注意本代碼沒有考慮輸入異常數(shù)據(jù)的情況
//用-1來表示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 來表示null,

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

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

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

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

在來看,測試代碼輸出的效果:

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

可以看出和 題目中輸入用例 這個圖 是一樣一樣的。只不過題目中圖沒有把 空節(jié)點 畫出來而已。

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

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

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

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    74

    瀏覽量

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

    關(guān)注

    1

    文章

    420

    瀏覽量

    26561

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

    機器人看點:宇科技王興興回上海母校 加速商業(yè)化落地 宇機器人手租賃火爆

    給大家?guī)硪恍C器人的消息: 宇科技王興興回上海母校 加速商業(yè)化落地 日前,宇科技創(chuàng)始人王興興在接受媒體專訪時候,介紹了公司的H1人形機器人的技術(shù)亮點及行業(yè)前景,H1人形機器人是首款能原地后翻出
    的頭像 發(fā)表于 02-25 11:26 ?1437次閱讀

    求解答,設(shè)備問題

    請問,rk3588j要再提取一個USB3.0接口設(shè)備怎么改
    發(fā)表于 02-20 11:22

    探秘 5KP28A極管:獨特構(gòu)造如何實現(xiàn)高效電壓抑制?

    探秘 5KP28A極管:獨特構(gòu)造如何實現(xiàn)高效電壓抑制?
    的頭像 發(fā)表于 02-08 13:41 ?498次閱讀
    探秘 5KP28A<b class='flag-5'>二</b>極管:獨特<b class='flag-5'>構(gòu)造</b>如何實現(xiàn)高效電壓抑制?

    科技在物聯(lián)網(wǎng)方面

    科技在物聯(lián)網(wǎng)領(lǐng)域有多方面的涉及和發(fā)展,以下是一些具體信息: 傳感器技術(shù)合作 與傳感器公司合作:宇科技與一些傳感器技術(shù)公司有合作,例如奧比中光為宇機器狗提供激光雷達及結(jié)構(gòu)光傳感器,這些傳感器
    發(fā)表于 02-04 06:48

    ads1278在上電正常使用時偶爾也會造成電流過大溫度過高的情況,具體可能是什么造成?

    造成如上問題。 2.ads1278手冊上有上電順序要求,但是并沒有說具體需要延遲多少時間,那么只要是上電的先后順序滿足就可以了嗎。 3.ads1278在上電正常使用時偶爾也會造成電流過大溫度過高的情況,具體可能是什么造成
    發(fā)表于 01-10 12:02

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備之設(shè)備組成和結(jié)構(gòu)

    的name和value。在設(shè)備中,可描述的信息包括:一、CPU的數(shù)量和類別;、內(nèi)存基地址和大?。蝗?、總線和橋;四、外設(shè)連接;五、中斷控制器和中斷使用情況;六、GPIO控制器和GPIO使用情況;七
    發(fā)表于 01-08 08:32

    飛凌嵌入式ElfBoard ELF 1板卡-初識設(shè)備之設(shè)備組成和結(jié)構(gòu)

    的name和value。在設(shè)備中,可描述的信息包括:一、CPU的數(shù)量和類別;、內(nèi)存基地址和大小;三、總線和橋;四、外設(shè)連接;五、中斷控制器和中斷使用情況;六、GPIO控制器和GPIO使用情況;七
    發(fā)表于 01-07 09:16

    柴油發(fā)動機構(gòu)造與檢修

    電子發(fā)燒友網(wǎng)站提供《柴油發(fā)動機構(gòu)造與檢修.pdf》資料免費下載
    發(fā)表于 10-14 13:58 ?0次下載

    什么是默克爾(Merkle Tree)?如何計算默克爾根?

    01 默克爾的概念 默克爾(Merkle Tree)是一種特殊的二叉樹,它的每個節(jié)點都存儲了一個數(shù)據(jù)塊的哈希值。哈希值是一種可以將任意長度的數(shù)據(jù)轉(zhuǎn)換為固定長度的字符串的算法,它具有唯一性和不可
    的頭像 發(fā)表于 09-30 18:22 ?2374次閱讀
    什么是默克爾<b class='flag-5'>樹</b>(Merkle Tree)?如何計算默克爾根?

    用PCM2904做的聲卡,造成波形失真的原因是什么

    請教一下造成波形失真的原因是什么, 這是我用PCM2904做的聲卡,輸出信號并連到輸入,測試正弦波無失真,三角波無失真,但方波和鋸齒波有失真,不知是信號 通路中什么原因造成
    發(fā)表于 09-14 09:25

    誤差放大器內(nèi)部構(gòu)造

    誤差放大器作為一種關(guān)鍵的電子元件,在電子測量、控制系統(tǒng)以及電源管理等領(lǐng)域發(fā)揮著重要作用。其內(nèi)部構(gòu)造雖然因具體設(shè)計而異,但大體上可以歸納為幾個核心部分:偏置電路、輸入級、增益級和輸出級。以下是對誤差放大器內(nèi)部構(gòu)造的詳細解析。
    的頭像 發(fā)表于 09-11 15:33 ?1707次閱讀

    工控一體機構(gòu)造及可能會發(fā)生的問題

    大家或許都對工業(yè)平板電腦有所耳聞,那么,對于它的主要構(gòu)造部分,我們又了解多少?熟悉這些部件,有助于我們在設(shè)備出現(xiàn)故障時,迅速定位問題所在。
    的頭像 發(fā)表于 08-25 16:52 ?1389次閱讀

    TLV3502的輸出電壓無法輸出到低電平,是什么問題造成

    您好,想咨詢一下TLV3502的輸出電壓無法輸出到低電平,這種是什么問題造成? 電路原理圖如下
    發(fā)表于 07-29 07:27