class ĠDelete Nodes And Return Forest Ġ{ ĊĊĠĠĠ Ġfun Ġdel Nodes ( root : ĠTreeNode ?, Ġto _ delete : ĠInt Array ): ĠList < TreeNode ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto Delete Ġ= Ġto _ delete . toSet () ĊĠĠĠĠĠĠĠ Ġval Ġforest Map Ġ= Ġmutable Map Of < Int , TreeNode >() ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforest Map [ root .` val `] Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtraverse ( null , root , forest Map , to Delete , DIRECTION . NONE ) ĊĠĠĠĠĠĠĠ Ġreturn Ġforest Map . values . toList () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġtraverse ( parent : ĠTreeNode ?, Ġnode : ĠTreeNode ?, Ġforest : ĠMutable Map < Int , TreeNode >, Ġto Delete : ĠSet < Int >, Ġdirection : ĠDI RECTION Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( to Delete . contains ( node .` val ` )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== ĠDI RECTION . LEFT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . left Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== ĠDI RECTION . RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . right Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . left Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforest [ node . left !! .` val `] Ġ= Ġnode . left !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . right Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforest [ node . right !! .` val `] Ġ= Ġnode . right !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforest . remove ( node .` val `) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtraverse ( node , node . left , forest , to Delete , DIRECTION . LEFT ) ĊĠĠĠĠĠĠĠ Ġtraverse ( node , node . right , forest , to Delete , DIRECTION . RIGHT ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠDI RECTION Ġ{ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĠĠĠĠĠĠĠ ĠLEFT , ĊĠĠĠĠĠĠĠ ĠRIGHT ĊĠĠĠ Ġ} Ċ }