一、深度優先法
思路:根據深度優先演算法,不斷的遞迴樹的深度,直到沒有葉子結點。使用的是遞迴的思想,大致的流程圖如下:
**如下:
/**
* 深度優先演算法
* @param root
* @return
*/public
static
intmaxdepth1
(treenode root)
執行結果:
二、廣度優先法
思路:使用乙個佇列來儲存當前層的節點,因為廣度優先演算法是一層一層來的,儲存空間中只儲存當前層。我們每次從佇列中個拿出乙個元素進行拓展,這樣每個都拓展完成,那麼佇列中儲存的就是下一層的所有節點元素,一直進行拓展,直到最後沒有子節點。記錄每次拓展,所拓展的層數就是樹的最大深度。**如下:
/**
* 廣度優先演算法
* @param root
* @return
*/public
static
intmaxdepth
(treenode root)
if(node.right != null)
size--;}
deep++;}
return deep;
}
執行結果:
三、對比
對比2個演算法,再給出的執行結果來看,深度優先演算法的速度明顯快於廣度優先演算法,因為深度優先演算法不需要拓展每乙個節點。但是廣度優先演算法需要拓展每一層的元素,導致時間上的差別,但是廣度有限在記憶體消耗要明顯低於深度優先演算法。因為深度優先演算法需要儲存拓展深度的這條路徑的所有元素,但是廣度優先演算法只需要儲存這一層的元素。不需要要對完整的深度路徑進行儲存。(個人理解)
如有錯誤,歡迎指正!!!
參考:
二叉樹的深度 二叉樹的深度 二叉樹最大寬度
題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...
二叉樹的最大深度
1.問題描述 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的距離。樣例給出一棵如下的二叉樹 1 2 3 4 5這個二叉樹的最大深度為3.2.解題思路 如果二叉樹為空,則深度為0 如果不為空,運用遞迴,分別求其左子樹和右子樹的深度,取最大的再加1,因為根節點深度是1,要加進去。3...
二叉樹的最大深度
問題描述 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的距離。樣例 給出一棵如下的二叉樹 1 2 3 4 5這個二叉樹的最大深度為3.實現思路 要求二叉樹的最大深度,首先判斷二叉樹是否為空,若為空,則深度為0。如果不為空,分別求左子樹的深度和右子樹的深度,取最大的那乙個加1,即...