package Ġle et code . kotlin . tree Ċ Ċ import Ġjava . util .* Ċ Ċ // Ġuse Ġof Ġglobal Ġk Ġis Ġdis cour aged , Ġso Ġsee Ġnext Ġsolution Ċ private Ġfun Ġk th Sm allest ( root : ĠTreeNode ?, Ġk : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġk Ġ= Ġk ĊĠĠĠ Ġvar Ġans Ġ= Ġ 0 ĊĠĠĠ Ġfun Ġin order ( root : ĠTreeNode ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( k Ġ== Ġ 0 Ġ|| Ġroot Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġin order ( root . left ) ĊĠĠĠĠĠĠĠ Ġif Ġ(-- k Ġ== Ġ 0 ) Ġans Ġ= Ġroot .` val ` ĊĠĠĠĠĠĠĠ Ġin order ( root . right ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġin order ( root ) ĊĠĠĠ Ġreturn Ġans Ċ } Ċ Ċ private Ġfun Ġk th Sm allest 2 ( root : ĠTreeNode ?, Ġk : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġans Ġ= Ġ 0 ĊĠĠĠ Ġfun Ġin order ( root : ĠTreeNode ?, Ġcnt : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cnt Ġ>= Ġk Ġ|| Ġroot Ġ== Ġnull ) Ġreturn Ġcnt ĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġin order ( root . left , Ġcnt ) ĊĠĠĠĠĠĠĠ Ġif Ġ(++ c Ġ== Ġk ) Ġans Ġ= Ġroot .` val ` ĊĠĠĠĠĠĠĠ Ġreturn Ġin order ( root . right , Ġc ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġin order ( root , Ġ 0 ) ĊĠĠĠ Ġreturn Ġans Ċ } Ċ Ċ private Ġfun Ġk th Sm allest 3 ( root : ĠTreeNode , Ġk : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġk Ġ= Ġk ĊĠĠĠ Ġvar Ġstack Ġ= ĠArray Deque < TreeNode >() ĊĠĠĠ Ġvar Ġcurr : ĠTreeNode ? Ġ= Ġroot ĊĠĠĠ Ġwhile Ġ( curr Ġ!= Ġnull Ġ|| Ġ! stack . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( curr Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( curr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Ġ= Ġcurr . left ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurr Ġ= Ġstack . pop () ĊĠĠĠĠĠĠĠ Ġif Ġ(-- k Ġ== Ġ 0 ) Ġreturn Ġcurr .` val ` ĊĠĠĠĠĠĠĠ Ġcurr Ġ= Ġcurr . right ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 Ċ } Ċ