按之字形順序打印二叉樹

哎危虱, 曬個(gè)風(fēng)景吧~

走在食堂的路上

今天的天空,白云朵朵唐全。埃跷。。祝今天去INTERSPEECH 2016的小伙伴邮利,一切順利弥雹!


每天生活的地方

時(shí)間限制:1秒空間限制:32768K
題目描述

請實(shí)現(xiàn)一個(gè)函數(shù)按照之字形打印二叉樹,即第一行按照從左到右的順序打印延届,第二層按照從右至左的順序打印剪勿,第三行按照從左到右的順序打印,其他行以此類推方庭。

我看網(wǎng)上大部分的算法是利用棧厕吉,兩個(gè)棧之間來回顛倒,這個(gè)思想也是很好的械念。

上代碼头朱!

/*1. 首先將根節(jié)點(diǎn)壓入棧s1。
   2. 將s1依次出棧龄减,保存每個(gè)節(jié)點(diǎn)值项钮,并依次將每個(gè)節(jié)點(diǎn)的左右節(jié)點(diǎn)壓入棧s2
   3. 將s2依次出棧,保存每個(gè)節(jié)點(diǎn)值,并依次將每個(gè)節(jié)點(diǎn)的右左節(jié)點(diǎn)壓入本s1<注:這里是先壓右子節(jié)點(diǎn)再壓左子節(jié)點(diǎn)>
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int> > result;
        if (!pRoot) { return result; }
        stack<TreeNode*> s1;
        stack<TreeNode*> s2;
        vector<int> temp;
        s1.push(pRoot);
        while (true) {
            while (!s1.empty()) {
                TreeNode* ptr = s1.top();
                s1.pop();
                if (!ptr) { continue; }
                s2.push(ptr->left);
                s2.push(ptr->right);
                temp.push_back(ptr->val);
            }
            if (temp.empty()) { break; }
            result.push_back(temp);
            temp.clear();
            /* 如果先把val記錄下來則需要判斷烁巫,那么在以后放入節(jié)點(diǎn)的時(shí)候要判別是否為空署隘,否則需要先判別為空,然后保存值亚隙。*/
            while (!s2.empty()) {
                TreeNode* ptr = s2.top();
                s2.pop();
                if (!ptr) { continue; }
                s1.push(ptr->right);
                s1.push(ptr->left);
                temp.push_back(ptr->val);
            }
            if (temp.empty()) { break; }
            result.push_back(temp);
            temp.clear();
        }
        return result;
    }
};

以上代碼來自網(wǎng)絡(luò)磁餐,順便說一句TreeNode* ptr用過之后還有要釋放掉的吧!J研崖媚!

ptr=NULL; //先設(shè)置為NULL
free(ptr);//釋放內(nèi)存  (所有自己申請的空間記得釋放喲!)

我的解法恤浪,利用一個(gè)雙端隊(duì)列也可以達(dá)到效果喲畅哑!


Paste_Image.png
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution
{
public:
    vector<vector<int> > Print(TreeNode* pRoot)
    {
        vector<vector<int> > vec;
        if(pRoot==NULL) return vec;
        //創(chuàng)建隊(duì)列
        deque<TreeNode*> q;
        q.push_back(pRoot);
        int left=0;
        int numberOfChildren=1;
        TreeNode* tempNode=NULL;
        while(!q.empty())
        {
            vector<int> temp;
            //進(jìn)入隊(duì)列
            for(int i=0; i<numberOfChildren; ++i)
            {
                if(left%2==0) //左 到 右   右出左進(jìn)   左孩子先
                {
                    tempNode = q.back();
                    q.pop_back();
                    //保存打印順序
                    temp.push_back(tempNode->val);
                    //孩子入隊(duì)列
                    if(tempNode->left!=NULL)
                    {
                        q.push_front(tempNode->left);
                    }
                    if(tempNode->right!=NULL)
                    {
                        q.push_front(tempNode->right);
                    }
                }
                else  //右 到 左   左出右進(jìn)   右孩子先
                {
                    tempNode = q.front();
                    q.pop_front();
                    //保存打印順序
                    temp.push_back(tempNode->val);
                    //孩子入隊(duì)列
                    if(tempNode->right!=NULL)
                    {
                        q.push_back(tempNode->right);
                    }
                    if(tempNode->left!=NULL)
                    {
                        q.push_back(tempNode->left);
                    }
                }
            }
            vec.push_back(temp);
            left++;
            numberOfChildren=q.size();
        }
        //free(tempNode);  釋放內(nèi)存居然,內(nèi)存空間還變大水由,不明覺厲荠呐。但是還是應(yīng)該釋放的。
        return vec;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砂客,一起剝皮案震驚了整個(gè)濱河市泥张,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鞠值,老刑警劉巖媚创,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異彤恶,居然都是意外死亡钞钙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門声离,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芒炼,“玉大人,你說我怎么就攤上這事术徊”竟簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵赠涮,是天一觀的道長子寓。 經(jīng)常有香客問我,道長笋除,這世上最難降的妖魔是什么别瞭? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮株憾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤瞎,他們只是感情好墙歪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贝奇,像睡著了一般虹菲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掉瞳,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天毕源,我揣著相機(jī)與錄音,去河邊找鬼陕习。 笑死霎褐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的该镣。 我是一名探鬼主播冻璃,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼损合!你這毒婦竟也來了省艳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嫁审,失蹤者是張志新(化名)和其女友劉穎跋炕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體律适,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辐烂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了擦耀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棉圈。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖眷蜓,靈堂內(nèi)的尸體忽然破棺而出分瘾,到底是詐尸還是另有隱情,我是刑警寧澤吁系,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布德召,位于F島的核電站,受9級特大地震影響汽纤,放射性物質(zhì)發(fā)生泄漏上岗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一蕴坪、第九天 我趴在偏房一處隱蔽的房頂上張望肴掷。 院中可真熱鬧敬锐,春花似錦、人聲如沸呆瞻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痴脾。三九已至颤介,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赞赖,已是汗流浹背滚朵。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留前域,地道東北人辕近。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像话侄,于是被迫代替她去往敵國和親亏推。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

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

  • 題目描述請實(shí)現(xiàn)一個(gè)函數(shù)按照之字形打印二叉樹年堆,即第一行按照從左到右的順序打印吞杭,第二層按照從右至左的順序打印,第三行按...
    NoFacePeace閱讀 336評論 0 0
  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,216評論 8 114
  • 上次寫了二叉樹遍歷鲁捏,其中在非遞歸的遍歷中芯砸,只寫了前序遍歷,沒有寫非遞歸中序遍歷和后續(xù)遍歷给梅。非遞歸要用到棧假丧,只要根據(jù)...
    BrianAguilar閱讀 456評論 0 1
  • 前言 本文是題主準(zhǔn)備面試時(shí)記錄下的筆記整理而來,稍顯粗陋动羽,還請各位擼友勿噴哈包帚! Topic 目錄數(shù)組字符串鏈表二叉...
    rh_Jameson閱讀 1,575評論 4 23
  • 是什么 數(shù)據(jù)持久層框架 使用方法 映射方式 1 xml映射 {}是參數(shù)標(biāo)記 ${}是字符串替換的占位符(這種方式要...
    紫石南閱讀 219評論 0 0