与えられたバイナリツリー内のすべての左葉の合計を検索します。
例:
3 / \ 9 20 / \ 15 7 それぞれ値9および15を有するバイナリツリー内の2枚の左葉があります。戻る24.
ソリューション1:
BFS
/ ** *バイナリツリーノードの定義。 *公共のクラスのTreeNode { * int型のval; *のTreeNodeは左。 *ツリーノードを右。 *ツリーノード(INT X){ヴァル= X。} *} * / クラスソリューション{ 公共 のint sumOfLeftLeaves(ツリーノードのルート){ int型 RES = 0 。 もし(ルート== NULL ){ 戻りRES。 } キュー <ツリーノード>キュー= 新しい LinkedListの<> (); queue.offer(ルート)。 しばらく(!queue.isEmpty()){ ツリーノードCUR = queue.poll()。 もし(!cur.left = NULL ){ 場合(cur.left.left == NULL && cur.left.right == NULL ){ RES + = cur.left.val。 } 他{ queue.add(cur.left)。 } } もし(!cur.right = NULL ){ queue.add(cur.right)。 } } 戻りRES。 } }
解決策2:
DFS
/ ** *バイナリツリーノードの定義。 *公共のクラスのTreeNode { * int型のval; *のTreeNodeは左。 *ツリーノードを右。 *ツリーノード(INT X){ヴァル= X。} *} * / クラスソリューション{ 公共 のint sumOfLeftLeaves(ツリーノードのルート){ 場合(ルート== NULL ){ 戻り 0 。 } INT RES = 0 。 もし(root.left!= nullの){ 場合(root.left.left == nullの && root.left.right == nullを){ RES + = root.left.val。 } 他{ RES + = sumOfLeftLeaves(root.left)。 } } RES + = sumOfLeftLeaves(root.right)。 リターンのres; } }