/* ĠLicensed Ġunder ĠApache - 2 . 0 Ġ@ æ¢ ¦ å¢ĥ è¿ · ç¦» Ġ*/ Ċ package Ġio . github . dream y lost Ċ Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* Ġ 9 1 9 . Ġ å®Įåħ¨ äºĮ åıī æłĳ æıĴåħ¥ åĻ¨ Ċ Ġ* Ċ Ġ* Ġ å®Įåħ¨ äºĮ åıī æłĳ æĺ¯ æ¯ı ä¸Ģ å±Ĥ ï¼Ī éĻ¤ æľĢåĲİ ä¸Ģ å±Ĥ å¤ĸ ï¼ī éĥ½æĺ¯ å®Įåħ¨ å¡« åħħ ï¼Ī åį³ ï¼Į èĬĤçĤ¹ æķ° è¾¾ åĪ° æľĢå¤§ ï¼ī çļĦ ï¼Į å¹¶ä¸Ķ æīĢæľīçļĦ èĬĤçĤ¹ éĥ½ å°½ åı¯èĥ½ åľ° éĽĨ ä¸Ń åľ¨ å·¦ ä¾§ ãĢĤ Ċ Ġ* Ġ è®¾è®¡ ä¸Ģä¸ª çĶ¨ å®Įåħ¨ äºĮ åıī æłĳ åĪĿå§ĭåĮĸ çļĦæķ°æį® ç»ĵæŀĦ Âł CB T Inser ter ï¼Į å®ĥ æĶ¯æĮģ ä»¥ä¸ĭ åĩł ç§į æĵįä½ľ ï¼ļ Ċ Ġ* Ċ Ġ* ĠC BT Inser ter ( TreeNode Ġroot ) Âł ä½¿çĶ¨ å¤´ èĬĤçĤ¹ ä¸º Âł root Âł çļĦ ç»Ļ å®ļ æłĳ åĪĿå§ĭåĮĸ è¯¥ æķ°æį® ç»ĵæŀĦ ï¼Ľ Ċ Ġ* ĠC BT Inser ter . insert ( int Ġv ) Âł Ġ åĲĳ æłĳ ä¸Ń æıĴåħ¥ ä¸Ģä¸ª æĸ° èĬĤçĤ¹ ï¼Į èĬĤçĤ¹ ç±»åŀĭ ä¸º ĠTreeNode ï¼Į åĢ¼ä¸º Ġv ĠãĢĤ ä½¿ æłĳ ä¿ĿæĮģ å®Įåħ¨ äºĮ åıī æłĳ çļĦ çĬ¶æĢģ ï¼Į å¹¶ è¿ĶåĽŀ æıĴåħ¥ çļĦ æĸ° èĬĤçĤ¹ çļĦ çĪ¶ èĬĤçĤ¹ çļĦåĢ¼ ï¼Ľ Ċ Ġ* ĠC BT Inser ter . get _ root () Ġå°Ĩ è¿ĶåĽŀ æłĳ çļĦ å¤´ èĬĤçĤ¹ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ@ author Ġl igu ob in @ grow ing io . com Ċ Ġ* Ġ@ version Ġ 1 . 0 , 2 0 2 0 / 9 / 1 1 Ċ Ġ*/ Ċ class ĠLe et code _ 9 1 9 Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 2 8 4 Ġms , 1 0 0 . 0 0 % ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 3 8 . 1 ĠMB , 1 0 0 . 0 0 % ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġclass ĠC BT Inser ter ( root : ĠTreeNode ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġr Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġqueue Ġ= ĠLinkedList < TreeNode >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġres Ġ= ĠArrayList < TreeNode >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! queue . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġqueue . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġqueue . poll First () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( node !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . left Ġ!= Ġnull ) Ġqueue . add Last ( node . left ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . right Ġ!= Ġnull ) Ġqueue . add Last ( node . right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġinsert ( v : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġres . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠTreeNode ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľĢåĲİ ä¸Ģä¸ª çĪ¶ èĬĤçĤ¹ ï¼ļ ( n - 1 )/ 2 ï¼Į åĽłä¸º æľĢåĲİ ä¸Ģä¸ª èĬĤçĤ¹ ç¼ĸåı· ä¸º n ï¼Į éĹ®é¢ĺ è½¬ åĮĸ ä¸º æ±Ĥ ç¼ĸåı· n çļĦ çĪ¶ èĬĤçĤ¹ ï¼Į åį³ æĢ» èĬĤçĤ¹ æķ° / 2 çļĦ åĲĳ ä¸ĭ åıĸ æķ´ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent : ĠTreeNode Ġ= Ġres [( count Ġ- Ġ 1 ) Ġ/ Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åŁº æķ° ï¼Į å·¦ ç©º ï¼Į åģ ¶ æķ° åı³ ç©º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count . and ( 1 ) Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . left Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . right Ġ= Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparent .` val ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget _ root (): ĠTreeNode ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠC BT Inser ter ( TreeNode Data . tree Node _ 5 _ 1 ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam _ 1 Ġ= Ġobj . insert ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( param _ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam _ 2 Ġ= Ġobj . get _ root () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( param _ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ