package Ġjp . programming life . lib pl jp . android Ċ Ċ import Ġjava . util . Array Deque ĊĊ Ċ @ Deprecated ("") Ċ class ĠTree Tra verser < T >( private Ġval Ġchildren : Ġ( T ) Ġ-> ĠIterable < T >) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¦ ª ãĥİ ãĥ¼ãĥī åĦ ª åħĪ ãģ§ ãĥĦ ãĥª ãĥ¼ãĤĴ æ¨ ª æĸŃ ãģĻãĤĭ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpre Order Traversal ( root : ĠT ): ĠSequence < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠArray Deque < Iterator < T >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( listOf ( root ). iterator ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( stack . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitr Ġ= Ġstack . pop () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( itr . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitr . next (). let Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren ( node ). iterator (). take If Ġ{ Ġit . hasNext () Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( itr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitr Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃĲ ãĥİ ãĥ¼ãĥī åĦ ª åħĪ ãģ§ ãĥĦ ãĥª ãĥ¼ãĤĴ æ¨ ª æĸŃ ãģĻãĤĭ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpost Order Traversal ( root : ĠT ): ĠSequence < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitr Stack Ġ= ĠArray Deque < Iterator < T >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Stack Ġ= ĠArray Deque < T >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitr Stack . push ( children ( root ). iterator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Stack . push ( root ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( itr Stack . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitr Ġ= Ġitr Stack . pop () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( itr . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitr . next (). let Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åŃĲ è¦ģ ç´ł ãģĮãģĤ ãĤĮãģ° çı¾åľ¨ ãģ® ãĤ¤ ãĥĨ ãĥ¬ ãĥ¼ãĤ¿ ãĥ¼ãĤĴ ãĤ¹ãĤ¿ ãĥĥãĤ¯ ãģ« ç© į ãĤĵ ãģ§ åŃĲ è¦ģ ç´ł ãģ® ãĥ«ãĥ¼ãĥĹ ãģ« ç§» ãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren ( node ). iterator (). take If Ġ{ Ġit . hasNext () Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Stack . push ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitr Stack . push ( itr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitr Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġyield ( node ) Ġ// Ġ åŃĲ è¦ģ ç´ł ãģĮ ãģª ãģĳ ãĤĮãģ° çı¾åľ¨ ãģ® ãĥİ ãĥ¼ãĥī ãĤĴ åĩºåĬĽ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åŃĲ è¦ģ ç´ł ãģĮ ãģªãģı ãģª ãģ£ãģŁ ãĤī ãĤ¹ãĤ¿ ãĥĥãĤ¯ ãģ® ãĥİ ãĥ¼ãĥī ãĤĴ åĩºåĬĽ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( node Stack . pop ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }