binary tree level order traversal ii)(二叉樹自下向上層序遍歷)

題目描述

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree{3,9,20,#,#,15,7},

return its bottom-up level order traversal as:

confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.

OJ's Binary Tree Serialization:

The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

Here's an example:

The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".

題目大意

實(shí)現(xiàn)二叉樹自底層向上層的層序遍歷蒸眠。

思路

還是二叉樹層序遍歷的問題狡相,只不過是自下向上捶朵;
很好解決
在C++中匈睁,可以用vector蹬碧,可以實(shí)現(xiàn)在vector前邊插入:

vector<vector<int > > vec; // 定義二維數(shù)組皇筛,其中元素為int類型
vector<int > vt; // 二維數(shù)組的新一行
vec.insert(vec.begin(), vt); // 在二維數(shù)組前面插入新的一行

或者在Java中:

ArrayList<ArrayList<Integer>> res = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
res.add(0, list);·

也可以實(shí)現(xiàn)在二維數(shù)組前面插入一行。

但是經(jīng)過我在用C++的實(shí)驗(yàn)社痛,發(fā)現(xiàn)先用vec.push_back(vt)的方式见转,插入,然后最后的時候用swap(vec[i], vec[j])交換一下蒜哀,不管是空間還是時間斩箫,效率更優(yōu)。

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
/*
    結(jié)構(gòu)體定義
*/
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/*
    具體實(shí)現(xiàn)算法
*/
typedef TreeNode* tree;
vector<vector<int> > levelOrderBottom(TreeNode *root)
{
    vector<vector<int > > vec; // 定義二維數(shù)組撵儿,其中元素為int類型
    if(root == NULL)return vec;
    queue<tree> qu; // 保存二叉樹層序遍歷結(jié)點(diǎn)的指針
    qu.push(root); // 頭指針入隊(duì)
    while(!qu.empty())
    {
        int index = qu.size(); // 本層的結(jié)點(diǎn)個數(shù)
        vector<int > vt; // 二維數(shù)組的新一行
        tree now; // 暫存當(dāng)前結(jié)點(diǎn)
        while(index--)
        {
            now = qu.front(); // 暫存當(dāng)前結(jié)點(diǎn)
            qu.pop(); // 出隊(duì)
            vt.push_back(now->val);
            if(now->left != NULL)qu.push(now->left); // 入隊(duì)
            if(now->right != NULL)qu.push(now->right); // 入隊(duì)
        }

        // 如果vt不為空乘客,則加入到二維數(shù)組的新一行中
        // 其實(shí)分析可以發(fā)現(xiàn),vt也不可能為空
        if(vt.size())
            vec.push_back(vt);
    }
    
    // 因?yàn)樽韵孪蛏系硇該Q一下
    for(int i=0,j=vec.size()-1; i<j; i++,j--)
    {
        swap(vec[i], vec[j]);
    }
    return vec;
}

// 二叉樹的層序遍歷算法
void print(TreeNode *root)
{
    queue<tree > qu;
    qu.push(root);
    while(!qu.empty())
    {
        tree now = qu.front();
        qu.pop();
        cout<<now->val<<endl;
        if(now->left != NULL)qu.push(now->left);
        if(now->right != NULL)qu.push(now->right);
    }
}
int main()
{
    tree tr;
    tr = new TreeNode(1);

    tree t1;
    t1 = new TreeNode(2);
    tr->left = t1;

    tree t2;
    t2 = new TreeNode(3);
    tr->right = t2;

    tree t3;
    t3 = new TreeNode(4);
    t2->left = t3;

    vector<vector<int > > vec;

    //print(tr);

    vec = levelOrderBottom(tr);
    for(int i=0; i<vec.size(); i++)
    {
        for(int j=0; j<vec[i].size(); j++)
        {
            cout<<vec[i][j]<<' ';
        }
        cout<<endl;
    }

    return 0;
}

以上易核。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浪默,隨后出現(xiàn)的幾起案子牡直,更是在濱河造成了極大的恐慌,老刑警劉巖纳决,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碰逸,死亡現(xiàn)場離奇詭異,居然都是意外死亡岳链,警方通過查閱死者的電腦和手機(jī)花竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掸哑,“玉大人约急,你說我怎么就攤上這事∶绶郑” “怎么了厌蔽?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長摔癣。 經(jīng)常有香客問我奴饮,道長,這世上最難降的妖魔是什么择浊? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任戴卜,我火速辦了婚禮,結(jié)果婚禮上琢岩,老公的妹妹穿的比我還像新娘投剥。我一直安慰自己,他們只是感情好担孔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布江锨。 她就那樣靜靜地躺著吃警,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啄育。 梳的紋絲不亂的頭發(fā)上酌心,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音挑豌,去河邊找鬼安券。 笑死,一個胖子當(dāng)著我的面吹牛浮毯,可吹牛的內(nèi)容都是我干的泰鸡。 我是一名探鬼主播盛龄,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赠制!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起政恍,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宪赶,沒想到半個月后蒙保,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體追他,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够掠。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡面殖,死狀恐怖脊僚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情增淹,我是刑警寧澤埠通,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站舞蔽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朵栖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一陨溅、第九天 我趴在偏房一處隱蔽的房頂上張望终惑。 院中可真熱鬧,春花似錦门扇、人聲如沸雹有。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霸奕。三九已至,卻和暖如春吉拳,著一層夾襖步出監(jiān)牢的瞬間质帅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工合武, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留临梗,地道東北人涡扼。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓稼跳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吃沪。 傳聞我的和親對象是個殘疾皇子汤善,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355