劍指offer 33- 之字形打印二叉樹

請實(shí)現(xiàn)一個函數(shù)按照之字形順序從上向下打印二叉樹。

即第一行按照從左到右的順序打印潮峦,第二層按照從右到左的順序打印或舞,第三行再按照從左到右的順序打印,其他行以此類推蔼囊。
樣例

輸入如下圖所示二叉樹[8, 12, 2, null, null, 6, 4, null, null, null, null]
    8
   / \
  12  2
     / \
    6   4
輸出:[[8], [2, 12], [6, 4]]

分析:
(BFS) O(n)

在上一道題《分行從上往下打印二叉樹》 的基礎(chǔ)上修改代碼焚志。

增加一個行號標(biāo)記i,偶數(shù)行直接reverse一下
時間復(fù)雜度分析:每個點(diǎn)遍歷一次畏鼓,所以時間復(fù)雜度是 O(n)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> printFromTopToBottom(TreeNode* root) {
        vector<vector<int>> res;//二維數(shù)組用于存放結(jié)果元素
        queue<TreeNode*> q;//定義一個隊(duì)列來模擬BFS
        if(!root) return res;//根元素為空酱酬,什么也不做,直接返回res
        q.push(root);//把根節(jié)點(diǎn)放入隊(duì)列中
        int i = 1; //i用來記錄行號
        q.push(nullptr);//NULL作為行末尾標(biāo)記
        
        vector<int> cur;// cur用來存放當(dāng)前行的元素
        while(q.size()) {//隊(duì)列中只要還有元素就進(jìn)行操作
            auto x = q.front();//訪問隊(duì)首元素
            q.pop();//刪掉隊(duì)首元素
            if(x) {//x為true云矫,說明該行還有元素需要操作
                cur.push_back(x->val);// 當(dāng)前元素存入cur中
                if(x->left) q.push(x->left);//將左兒子放入隊(duì)列中
                if(x->right) q.push(x->right);//將右兒子放入隊(duì)列中
            } else {//x為false膳沽,說明已經(jīng)訪問行尾標(biāo)志NULL
                if (q.size()) q.push(nullptr);//行元素已經(jīng)在隊(duì)列中了,這是增加新的行標(biāo)記NULL
                if(i % 2 == 0) reverse(cur.begin(), cur.end()); //偶數(shù)行的元素翻轉(zhuǎn)一下
                res.push_back(cur); //把當(dāng)前行的元素存放在結(jié)果數(shù)組中
                cur.clear();//把當(dāng)前行的元素清空
                i++;// 當(dāng)前行完成让禀,行號加1
            }
        }
        
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挑社,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子巡揍,更是在濱河造成了極大的恐慌痛阻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吼肥,死亡現(xiàn)場離奇詭異录平,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缀皱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門斗这,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啤斗,你說我怎么就攤上這事表箭。” “怎么了钮莲?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵免钻,是天一觀的道長彼水。 經(jīng)常有香客問我,道長极舔,這世上最難降的妖魔是什么凤覆? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮拆魏,結(jié)果婚禮上盯桦,老公的妹妹穿的比我還像新娘。我一直安慰自己渤刃,他們只是感情好拥峦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卖子,像睡著了一般略号。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洋闽,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天玄柠,我揣著相機(jī)與錄音,去河邊找鬼喊递。 笑死随闪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的骚勘。 我是一名探鬼主播铐伴,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俏讹!你這毒婦竟也來了当宴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤泽疆,失蹤者是張志新(化名)和其女友劉穎户矢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殉疼,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯浪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓢娜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挂洛。...
    茶點(diǎn)故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖眠砾,靈堂內(nèi)的尸體忽然破棺而出虏劲,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布柒巫,位于F島的核電站励堡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堡掏。R本人自食惡果不足惜应结,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泉唁。 院中可真熱鬧摊趾,春花似錦、人聲如沸游两。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贱案。三九已至,卻和暖如春止吐,著一層夾襖步出監(jiān)牢的瞬間宝踪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工碍扔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘩燥,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓不同,卻偏偏與公主長得像厉膀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子二拐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評論 2 360

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