完全二叉樹的遍歷https://pintia.cn/problem-sets/1629459462098612224/exam/
大家可以翻看我自己之前錄制的視頻,遞歸問題,可以認(rèn)為是一個遞歸二叉樹的問題,但是到底這個遞歸二叉樹是什么樣子的,這個題目的代碼給我們了一個非常清晰的答案:
#include?<iostream>
using?namespace?std;
int??n;
const?int?N?=??40;
int?q[N];
int?t[N];
int?cnt;
void?dfs(int?u){
????
????if(u?>?n)?return;
????
????dfs(u?*?2);
????
????dfs(u?*?2?+?1);
????
????t[u]?=?q[cnt?++];
????
}
int?main(){
????
????cin?>>?n;
????
????for(int?i?=?0;i?<?n;i?++)?cin?>>?q[i];
????
????dfs(1);
????
????for(int?i?=?1;i?<=?n;i?++)?cout?<<?t[i]?<<?"?";
????
????
????return?0;
}
在遞歸函數(shù)當(dāng)中,上來的dfs(u * 2) 和 dfs(u * 2 + 1),可能讓很多人懵,但是其實是沒有必要懵的,這里的過程就是構(gòu)建了一個遞歸二叉樹,不用想復(fù)雜 就是構(gòu)造了一個二叉樹,然后填上相應(yīng)的數(shù)字,就沒有其他的問題了,當(dāng)然這里要注意這里是完全二叉樹的遍歷,一定是完全二叉樹
標(biāo)簽: