説明タイトルは:バイナリツリーのために、バイナリツリーは最大の深さを返します。
バイナリツリーを考えると、その最大の深さを見つけます。
最大深さは、最も遠いリーフノードにルートノードの下から最長パスに沿ったノードの数です。
注:葉は子を持たないノードです。
例:
バイナリツリーを考えると [3,9,20,null,null,15,7]
、
3 / \ 9 20 / \ 15 7
その深さ= 3を返します。
アイデア:
再帰、その後、1のいずれか大きい方の左部分木と右のサブツリーの深さ、のルートを取得するには、ルートから始まるが、その後、ツリーの最大の深さを得ました
境界条件:現在のノードは、次に、再帰的サブツリー、現在のサブツリーのそれ以外の場合は、最大深さを有します
再帰前方セグメント:現在のノードが子を持つ、再帰的
再帰的なリターン・セグメント:現在のノードに子がありません
コードの実装:
/ ** *バイナリツリーノード定義のA。 *パブリッククラスツリーノード{ * INTヴァル; *ツリーノード左; *ツリーノード右; *ツリーノード(INT X){X =ヴァル;} *} * / クラスソリューション{ 公共 のint MAXDEPTH (ツリーノードのルート){ // アイデア // 再帰: // 最も深い深さのために、+1どちらか大きい方のノードの左サブツリー及び右サブツリーの深さを得るために、出発根から // 境界条件:現在のノードかどうか子ノードが返されませんでした、再帰的にダウンが続き、ある // 再帰前方セグメントを:現在のノードが子供持っ // 再帰的なリターンセグメントを:シングルサインノードは、子がありません // リターン1+ Math.max(MAXDEPTH(根を.LEFT)、MAXDEPTH(root.right)) 。 //は、各ノードの深さを得るために、1の深さを追加し、現在のノードの左と右のサブツリー偉大な深さを返します // バック最深の深さの根に得るために最終的に時間 のIF(ルート== nullの)リターン 0 ; リターン。+ 1 Math.max(MAXDEPTH(root.left)、MAXDEPTH(root.right)); } }