leet code 104 二叉樹的最大深度

2021-09-11 04:48:28 字數 1211 閱讀 2073

q:給定乙個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:給定二叉樹 [3,9,20,null,null,15,7],

返回它的最大深度 3 。

因為沒有做過關於樹方面的演算法題,所以我先隨便找了一篇樹的遍歷看了看,主要是講了三種遍歷方法的非遞迴方法。應該跟這道題沒有啥關係,先放在這做個記錄。

【**資料結構】二叉樹遍歷

方法一:遞迴

應該是用 深度優先搜尋 (dfs)和 遞迴 演算法來解這道題。

深度優先演算法,我覺得簡單來說就是,當有很多條鏈的時候,先完整的搜尋完一條鏈,再搜尋下一條。每個結點只能訪問一次。

先從最開始訪問,然後回溯到起點,然後看看起點有沒有相鄰的結點還沒被訪問,如果有,就訪問另一條路,沒有就結束。

【dfs】深度優先搜尋遞迴方式講解

class solution 

};

執行的比較慢,看了一下官網的複雜度分析,粘了過來。這裡函式呼叫自己就是遞迴。遞迴我的理解就是,先逐個從外往裡呼叫直到不滿足條件為止,然後再從裡往外挨個計算。if()就是讓它停止遞迴的條件。可以看一下這篇文章。

簡單談談 c/c++ 遞迴的思想,實現,以及和迴圈的關係

方法二:迭代

看了官方題解,迭代大概就是用乙個佇列來儲存每一層結點及它的左右孩子。比如,二叉樹 [3,9,20,null,null,15,7] 。先把3,9,20,15,7放到佇列裡,此時佇列大小為5,然後挨個看有沒有左右孩子,有的話就push進隊尾,然後把隊頭這個pop掉。這個小迴圈之後。佇列變成9.20.15.7.就只包括了第二層和第三層的數。這樣不停大迴圈,直到隊列為空停止。每一次小迴圈都往下走了一層,用乙個計數器計數即可。

**如下:

不知道為啥。最近跑**都很慢,用了別人的**,相差也很大。

LeetCode104二叉樹最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 definition for a binary tree node....

LeetCode 104 二叉樹的最大深度

題目描述 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 解題思路 此題可以用層次遍歷來解,每層設定乙個count值來...

leetcode 104 二叉樹的最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 definition for a binary tree node....