https://www.bilibili.com/video/av46402848/
最初の問題解決のアプローチ
/ ** *バイナリツリーノード定義のA。 *パブリッククラスツリーノード{ * INTヴァル; *ツリーノードは、左; *ツリーノードが正しい; *ツリーノード(INT X){X =ヴァル;} *} * / クラスのソリューション{ 公共のint minDepthを(ツリーノードルート){ IF(ルート== NULL) 戻り0; IF(root.left == NULL) を返すminDepth(root.right)+ +1; //!!!!!キーの左部分木は右のサブツリーを参照nullである IF(root.right == null)の minDepth(root.left)+1を返す; //します!!!!!キーの右サブツリーサブツリーNULLのまま参照される int型左= minDepth(root.left)+1; int型の右= minDepth(root.right)+1; Math.minを(左、右)を返す; //!!!!!キー } }
レベルを達成するために第2のリンクリストトラバーサル
クラスソリューション{ 公共のint minDepth(ツリーノードのルート){ int型RES = 0。 (ルート== null)の場合は リターンのres; LinkedListは<のTreeNode> LL =新しいLinkedListは<のTreeNode>(); ll.add(ルート)。 (!ll.isEmpty())中{ int型のサイズ= ll.size(); 解像度++; //要用两个一方的原因主要是增加层作用 しながら(サイズ> 0){ ツリーノードTEMP = ll.poll()。 (temp.left == nullの&& temp.right == null)の場合は リターンのres; (!temp.right = null)の場合 ll.add(temp.right)。 (!temp.left = null)の場合 ll.add(temp.left)。 サイズ - ; } } RESを返します。 } }