package Ġutils Ċ Ċ class ĠBinary Tree < T : ĠNumber >( ĊĠĠĠ Ġval Ġroot : ĠBinary TreeNode < T > Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom String ( tree : ĠString ): ĠBinary Tree < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġtree . line Sequence (). iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠBinary TreeNode ( lines . next (). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Line Ġ= Ġmutable ListOf ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( lines . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlines . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Line Ġ= Ġline . split (" Ġ"). map Ġ{ Ġv Ġ-> ĠBinary TreeNode ( v . toInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Line . forEach Indexed Ġ{ Ġi , Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . left Ġ= Ġnew Line [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . right Ġ= Ġnew Line [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Line Ġ= Ġnew Line . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBinary Tree ( root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Order Iterator (): ĠIterator < Binary TreeNode < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpost Order Iterator ( root ). iterator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Order Iterator ( n : ĠBinary TreeNode < T >): ĠSequence < Binary TreeNode < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n . left Ġ!= Ġnull ) Ġyield All ( post Order Iterator ( n . left !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n . right Ġ!= Ġnull ) Ġyield All ( post Order Iterator ( n . right !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( n ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠBinary TreeNode < T >( ĊĠĠĠ Ġval Ġvalue : ĠT , ĊĠĠĠ Ġvar Ġleft : ĠBinary TreeNode < T >? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġright : ĠBinary TreeNode < T >? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġis Leaf () Ġ= Ġleft Ġ== Ġnull Ġ&& Ġright Ġ== Ġnull Ċ }