111タイトル:バイナリツリーの最小深さ

A. 問題の説明

最小深さを調べるために、バイナリツリーを考えます。

最小深さは、リーフノードに最も近いルートノードから最短パス内のノードの数です。

説明:リーフノードは、ノードが子ノードを持たないです。

例:

与えられたバイナリツリー[3,9,20、NULL、NULL、15,7]、

    3

   / \

  9 20

      / \

   15 7

最小深さ2戻ります。

II。問題解決のためのアイデア

このトピックやアイデア:+再帰的に解決深さ優先探索を使用します。

最小深さを見つけるために、判定されたリーフノードから始まる再帰関数の構築(根)、ボトムアップファッション、:ステップ。

ステップ2:一方のノードでは、再帰的に、最終的に最下層の深さを返し、左と右のサブツリーは、再帰的に繰り返されるノードの最小の深さを決定し、次にです。

III。結果

実行時:0ミリ秒は、すべてのJavaの提出にユーザーの100.00パーセントを破りました

メモリ消費量:37.6メガバイトには、Javaの提出内のすべてのユーザーの56.49パーセントを破りました

IV。Javaコード

クラスソリューション{
     公共 のint minDepth(ツリーノードのルート){
         場合(ルート== NULL ){
            戻り 0 
       } {
            リターンgetTree(ルート)。
       } 
    } 
    公共 のint getTree(ツリーノードのルート){
         int型 leftnum = 1、rightnum = 1 
        
        もし(!root.left = ヌル){ 
            leftnum = getTree(root.left)+1 ; 
        } 
        であれば(root.right!= NULL ){ 
            rightnum= getTree(root.right)+1 
        } 
        であれば(root.left!= NULL && root.right!= NULL ){
             リターンMath.min(leftnum、rightnum)。
        } {
             リターンMath.max(leftnum、rightnum)。
        } 
        
    } 
}

 

おすすめ

転載: www.cnblogs.com/xiaobaidashu/p/11842160.html