二叉樹遍歷

二叉樹遍歷可以分為廣度遍歷和深度遍歷,深度遍歷又可以分為前序遍歷、后序遍歷、中序遍歷脚草。
對(duì)于一個(gè)二叉樹,如下圖:



廣度遍歷:a,b,c,d,f,e,g
前序遍歷:a,b,d,e,f,g,c
后序遍歷:e,d,g,f,b,c,a
中序遍歷:d,e,b,g,f,a,c

常用的遍歷有遞歸和非遞歸版本原献,拿廣度遍歷來說:
  • 遞歸版本:
class TreePrinter {
public:
    vector<vector<int> > printTree(TreeNode* root) {
        vector<vector<int> >res;
        if(root == NULL) return res;
        printTree(res,root,0);
        return res;
    }
    void printTree(vector<vector<int>>&res,TreeNode* root,int total)//這里使用total來記錄存放在那一層
    {
        if(root == NULL) return;
        if(res.size()==total)
            res.push_back(vector<int>());
        res[total].push_back(root->val);
        printTree(res,root->left,total+1);
        printTree(res,root->right,total+1);
    }
};

二叉樹的廣度優(yōu)先遍歷和先序遍歷有幾分相似馏慨,所不同的是廣度優(yōu)先遍歷使用一個(gè)total來記錄當(dāng)前二叉樹節(jié)點(diǎn)屬于那一層埂淮。

  • 非遞歸版本:
class TreePrinter {
public:
   vector<vector<int> > printTree(TreeNode* root) {
       // write code here
       vector<vector<int>> result;
       result.resize(500);
       queue<TreeNode*> q;
       int last, nlast, layer=0;
       q.push(root);
       last = root->val;
       while(!q.empty())
       {
          TreeNode* t = q.front();
           result[layer].push_back(t->val);
           if(t->left) q.push(t->left);
           if(t->right) q.push(t->right);
           if(t->val == last) layer++, last = q.back()->val;
           q.pop();
       }
       result.resize(layer);
       return result;
   }
};

非遞歸版本都需要借助一個(gè)隊(duì)列或者棧,將其左右孩子放入棧写隶,自己出棧倔撞。

      同樣的道理,你可以實(shí)現(xiàn)一下二叉樹的先序遍歷慕趴、后續(xù)遍歷痪蝇、和中序遍歷。
      對(duì)于二叉樹的算法冕房,常用的就是遞歸方法躏啰,所以大家要熟練掌握遞歸,如果你還不了解遞歸耙册,建議你從斐波拉契數(shù)列開始看起~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末给僵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子详拙,更是在濱河造成了極大的恐慌帝际,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饶辙,死亡現(xiàn)場(chǎng)離奇詭異蹲诀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弃揽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門脯爪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矿微,你說我怎么就攤上這事披粟。” “怎么了冷冗?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵返帕,是天一觀的道長纷铣。 經(jīng)常有香客問我起愈,道長以现,這世上最難降的妖魔是什么金拒? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任优烧,我火速辦了婚禮照激,結(jié)果婚禮上舌仍,老公的妹妹穿的比我還像新娘恭取。我一直安慰自己泰偿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布蜈垮。 她就那樣靜靜地躺著耗跛,像睡著了一般裕照。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上调塌,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天晋南,我揣著相機(jī)與錄音,去河邊找鬼羔砾。 笑死负间,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姜凄。 我是一名探鬼主播政溃,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼态秧!你這毒婦竟也來了董虱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤屿聋,失蹤者是張志新(化名)和其女友劉穎空扎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體润讥,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡转锈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楚殿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撮慨。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脆粥,靈堂內(nèi)的尸體忽然破棺而出砌溺,到底是詐尸還是另有隱情,我是刑警寧澤变隔,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布规伐,位于F島的核電站,受9級(jí)特大地震影響匣缘,放射性物質(zhì)發(fā)生泄漏猖闪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一肌厨、第九天 我趴在偏房一處隱蔽的房頂上張望培慌。 院中可真熱鬧,春花似錦柑爸、人聲如沸吵护。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馅而。三九已至祥诽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間用爪,已是汗流浹背原押。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偎血,地道東北人诸衔。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像颇玷,于是被迫代替她去往敵國和親笨农。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容