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)。 } } }