leetcode 二叉樹的最大深度
leetcode 二叉樹的最小深度
我們知道完全二叉樹,是可以根據節點數量進行計算出深度的, 但是非完成二叉樹呢 , 他就不滿足了,
樹結構體
public class treenode
}
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明:葉子節點是指沒有子節點的節點。
/**
* 最大深度
* * @param root 根節點
* @return 最大深度
*/public static int maxdepth(treenode root)
首先我畫一張圖 大家理解一下 ,
所以他的意思就是 當我找到乙個葉子節點 , 我就+1 (在那個分支上) , 然後返回的時候 , 大的+1 ; 所以我們想想我們計算樹的深度是不是這麼計算了 從 1->3->4 , 從4開始返回+1 (加一是記錄深度), 每次遇到根節點都要比較一下, 取最大值然後再加一
最小深度是從根節點到最近葉子節點(空節點當然不算了)的最短路徑上的節點數量。說明:葉子節點是指沒有子節點的節點。正常人的思路都是下面這個, 前提是做了前面那道題 , 直接答案反過來麼 , 但是我們先往下看
/**
* 最小深度
* * @param root
* @return
*/public static int mindepth(treenode root)
下面是程式的基本執行流程
看似這個問題和上面那個問題相反 ,但是執行起來還是不好想的, 比如取最短 ,是不是我們拿這個題為例子, 每次遇到根節點都進行比較一下取最小,然後+1 , 其實目的就是為了找到最短的分支 .
有一種情況比較特殊 : 就是他這裡說是根節點到最近葉子節點的最短路徑
, 所以比如我們上面畫的是錯的, 因為 null不算是葉子節點, 他為空 ,所以上面那個題葉子節點是4 , 此時樹的最小深度是3 ,所以不單單是我們上述題反過來那麼簡單 ,上述例子出來是1 .
所以正確的**是 :
/**
* 最小深度 , 從根節點到最近葉子節點的最短路徑上的節點數量。
* * @param root 根節點
* @return 到最近葉子節點的最短距離
*/public static int mindepth(treenode root)
執行流程就是下面這個 , 因為空的葉子節點
不算, 所以我們遇到空葉子節點性需要(不知道是左是右)排除,就是left + right + 1
,可能left=0或者right=0 , 兩者都等於或者
有0則加1 , 無0則取最下+1 ;
二叉樹最大深度和最小深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的距離。如果二叉樹為空,則深度為0 如果不為空,分別求左子樹的深度和右子樹的深度,去最大的再加1,因為根節點深度是1,要加進去。int maxdepth treenode root 給定乙個二叉樹,找出其最小深度。二叉樹的最小深度為根...
二叉樹的最大深度和最小深度
題目意思很好理解,下面看 獲取二叉樹的最大深度和最小深度 獲取最小深度 func mindepth root treenode int if root.left nil root.right nil 初始化最小值 mind math.maxint32 左子樹最小值 if root.left nil ...
二叉樹的最大深度和最小深度
二叉樹的最大深度 給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 分析 這個就是最簡單的二叉樹深度計算,左右支遞迴取...