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....