104.[二叉樹最大深度] Maximum Depth of Binary Tree

帽子zhzhC++dadasort> 最基礎(chǔ)的二叉樹遍歷的問題,求最大深度黎棠。


Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

二叉樹都忘了掌呜,有點淡淡的憂桑

從這道題開始就初涉圖論的內(nèi)容了大刊,最基本的二叉樹,又是最基本的遍歷。但是想一想伟墙,若是沒有這道題钳吟,我還永遠忘了呢!待我想起遍歷大法贴见,看二叉樹尸橫遍野吧烘苹。
二叉樹基礎(chǔ)包括深度優(yōu)先搜索、廣度優(yōu)先搜索蝇刀,最大/最小深度螟加,最大/最小廣度,涉及遞歸吞琐。初步感覺對于二叉樹掌握這幾個就基本夠了捆探。

遞歸,好久不見

每逢我看到遞歸站粟,都有點望而生畏黍图。但至少就這道題來說,即使自己腦容量的內(nèi)存和CPU不夠奴烙,不能跟著遞歸深思熟慮助被,但遞歸確實是最容易用“第六感”去解決問題的辦法∏芯鳎“反正我解決不了的讓我的孩子去解決”揩环,我想這就是遞歸的精髓吧~

用遞歸求二叉樹最大深度

請看帶注釋的代碼(今天因為注釋詳細(xì)被夸了@-@)
2016-07-18 00:04:10

/**
 * 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:
    int maxDepth(TreeNode* root) {
        //求二叉樹最大深度,遞歸解法
        if(!root) return 0; //0的情況幅虑,到葉子節(jié)點了丰滑。
        
        int leftdepth = maxDepth(root -> left) + 1;//左側(cè)來源的深度
        int rightdepth = maxDepth(root -> right) + 1;//右側(cè)來源的深度
        
        return max(leftdepth,rightdepth);//返回該節(jié)點左右最大值
    }
};

運行時間8ms。似乎還有更快的辦法倒庵。

神奇的棧褒墨,非遞歸方法

當(dāng)年學(xué)過數(shù)據(jù)結(jié)構(gòu)炫刷,也還給老師很多了。欠缺砸實郁妈。

棧浑玛,我就沒擅用過

“采用二叉樹的后序遍歷非遞歸算法。由于后序遍歷非遞歸算法使用一個棧實現(xiàn)噩咪,每次都會在一條路徑上走到最底層才向上訪問顾彰,再向右訪問。因此剧腻,記錄下棧在遍歷中的最大值拘央,即為二叉樹的最大深度∈樵冢”

先貼一段博客園的代碼學(xué)習(xí)學(xué)習(xí):

#include <iostream>
#include <stack>
using namespace std;
typedef struct BinTree
{
    int data;
    BinTree *lc;
    BinTree *rc;
}BTNode,*BinTree;
int max(int a,int b)
{
    return (a>b)?a:b;
}

int BinTreeDepth(BinTree T)
{
    stack<BinTree> s;
    BinTree p = T,r = NULL;
    int depth=0;
    while(p||!s.empty())
    {
        if(p)
        {    //從根節(jié)點向左邊走
            s.push(p);
            int size = s.size();//獲取棧的大小
            depth = max(depth,size);//替換最大值
            p = p->lc;
        }
        else
        {    //左邊走不通向右走
            p = s.top();
            if(p->rc&&p->rc!=r)//如果右子樹存在灰伟,且未被訪問過
            {
                p = p->rc;
                s.push(p);
                int size = s.size();//獲取棧的大小
                depth = max(depth,size);//替換最大值
                p = p->lc;
            }else
            {
                p=s.top();
                s.pop();
                cout<<p->data<<endl;
                r=p;            //記錄最近訪問的節(jié)點
                p=NULL;            //節(jié)點訪問完之后,重置p指針,目的是為了防止再次將左孩子壓棧
            }
        }
    }
    return depth;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末儒旬,一起剝皮案震驚了整個濱河市栏账,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栈源,老刑警劉巖挡爵,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異甚垦,居然都是意外死亡茶鹃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門艰亮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闭翩,“玉大人,你說我怎么就攤上這事迄埃×圃希” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵侄非,是天一觀的道長蕉汪。 經(jīng)常有香客問我,道長逞怨,這世上最難降的妖魔是什么者疤? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮叠赦,結(jié)果婚禮上宛渐,老公的妹妹穿的比我還像新娘。我一直安慰自己眯搭,他們只是感情好窥翩,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳞仙,像睡著了一般寇蚊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棍好,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天仗岸,我揣著相機與錄音,去河邊找鬼借笙。 笑死扒怖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的业稼。 我是一名探鬼主播盗痒,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼低散!你這毒婦竟也來了俯邓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤熔号,失蹤者是張志新(化名)和其女友劉穎稽鞭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體引镊,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡朦蕴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弟头。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吩抓。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亮瓷,靈堂內(nèi)的尸體忽然破棺而出琴拧,到底是詐尸還是另有隱情,我是刑警寧澤嘱支,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布蚓胸,位于F島的核電站,受9級特大地震影響除师,放射性物質(zhì)發(fā)生泄漏沛膳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一汛聚、第九天 我趴在偏房一處隱蔽的房頂上張望锹安。 院中可真熱鬧,春花似錦、人聲如沸叹哭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽风罩。三九已至糠排,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間超升,已是汗流浹背入宦。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留室琢,地道東北人乾闰。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像盈滴,于是被迫代替她去往敵國和親涯肩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

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

  • 一直以來雹熬,我都很少使用也避免使用到樹和圖,總覺得它們神秘而又復(fù)雜宽菜,但是樹在一些運算和查找中也不可避免的要使用到,那...
    24K男閱讀 6,747評論 5 14
  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu)竿报,樹與前面介紹的線性表铅乡,棧,隊列等線性結(jié)構(gòu)不同烈菌,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,452評論 1 31
  • 二叉樹的定義#### 二叉樹是n(n>=0)個具有相同類型的元素的有限集合阵幸,當(dāng)n=0時稱為空二叉樹,當(dāng)n>0時芽世,數(shù)...
    kylinxiang閱讀 1,394評論 0 2
  • 1.什么是二叉樹挚赊? 在計算機科學(xué)中,二叉樹是每個節(jié)點最多有兩個子樹的樹結(jié)構(gòu)济瓢。通常子樹被稱作“左子樹”和“右子樹”荠割,...
    zcaaron閱讀 1,263評論 2 15
  • 去年二叉樹算法的事情鬧的沸沸揚揚,起因是Homebrew 的作者 @Max Howell 在 twitter 上發(fā)...
    Masazumi柒閱讀 1,597評論 0 8