バイナリツリーを考えると、ツリーの最後の行の左端の値を見つけます。
例1:
入力: 2 / \ 1 3 出力: 1
例2:
入力: 1 / \ 2 3 / / \ 4 5 6 / 7 出力: 7
注:ツリーをとることができる(すなわち、与えられたルートノード)がNULLではありません。
解決策1:
DFS、予約限定!
/ ** *バイナリツリーノードの定義。 *公共のクラスのTreeNode { * int型のval; *のTreeNodeは左。 *ツリーノードを右。 *ツリーノード(INT X){ヴァル= X。} *} * / クラスソリューション{ int型の高さ= 0 。 int型のres = 0 ; 公共 INT findBottomLeftValue(ツリーノードのルート){ ヘルパー(根、 1 )。 リターンのres; } プライベート ボイドヘルパー(ツリーノードのルート、INT 深さ){ 場合(ルート== NULL){ 返します。 } であれば(高さ< 深さ){ 高さ = 深。 RES = root.val。 } ヘルパー(root.left、深さ + 1 )。 ヘルパー(root.right、深さ + 1 )。 } }
解決策2:
BFS
/ ** *バイナリツリーノードの定義。 *公共のクラスのTreeNode { * int型のval; *のTreeNodeは左。 *ツリーノードを右。 *ツリーノード(INT X){ヴァル= X。} *} * / クラスソリューション{ 公共 のint findBottomLeftValue(ツリーノードのルート){ キュー <ツリーノード>キュー= 新しい LinkedListの<> (); int型のres = 0 ; queue.offer(ルート)。 一方、(!queue.isEmpty()){ ツリーノードCUR = queue.poll()。 RES =cur.val; もし(!cur.right = ヌル){ queue.offer(cur.right)。 } であれば(cur.left!= NULL ){ queue.offer(cur.left)。 } } 戻りRES。 } }