package Ġcom . github . sol air er ove . al gs 4 . le pro sor ium . binary _ tree Ċ Ċ import Ġkotlin . math . max Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln ( binary Tree Di ameter ( node Ġ= Ġget Valid Tree ())) Ġ// Ġ 4 Ċ } Ċ Ċ private Ġdata Ġclass ĠTree Info ( val Ġdiameter : ĠInt , Ġval Ġheight : ĠInt ) Ċ Ċ // ĠO ( n ) Ġtime Ġ| ĠO ( h ) Ġspace Ċ private Ġfun Ġbinary Tree Di ameter ( node : ĠTreeNode ?): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġget Tree Info ( node ). diameter Ċ } Ċ Ċ private Ġfun Ġget Tree Info ( node : ĠTreeNode ?): ĠTree Info Ġ{ ĊĠĠĠ Ġif Ġ( node Ġ== Ġnull ) Ġreturn ĠTree Info ( diameter Ġ= Ġ 0 , Ġheight Ġ= Ġ 0 ) ĊĊĠĠĠ Ġval Ġleft Ġ= Ġget Tree Info ( node . left ) ĊĠĠĠ Ġval Ġright Ġ= Ġget Tree Info ( node . right ) ĊĊĠĠĠ Ġval Ġlongest Height Ġ= Ġleft . height Ġ+ Ġright . height ĊĠĠĠ Ġval Ġmax Di ameter Ġ= Ġmax ( left . diameter , Ġright . diameter ) ĊĠĠĠ Ġval Ġcurr Di ameter Ġ= Ġmax ( longest Height , Ġmax Di ameter ) ĊĠĠĠ Ġval Ġcurr Height Ġ= Ġ 1 Ġ+ Ġmax ( left . height , Ġright . height ) ĊĊĠĠĠ Ġreturn ĠTree Info ( diameter Ġ= Ġcurr Di ameter , Ġheight Ġ= Ġcurr Height ) Ċ } Ċ