パッケージLeetCode_1382 輸入kotlin.collections.ArrayList / ** * 1382バランスのバイナリ検索ツリー * https://leetcode.com/problems/balance-a-binary-search-tree/description/ * *例: * VAR TI = TreeNode(5) *のvar V = ti.`val` バイナリツリーノードのための*の定義。 * * 1.BST + INORDER =>配列をソート *時間複雑度はO(N) *空間の複雑さはO(N)である * * 2.coverは、BST(バイナリ検索ツリー)に配列をソート *時間複雑度はO(N)であり、 *空間の複雑さはO(LOGN)される * / クラスツリーノード(VAR `val`:INT){ varが左:ツリーノードを?= ヌル のvar右:TreeNodeの?= NULL } クラスソリューション{ 楽しいbalanceBST(root_:ツリーノード):ツリーノード?{ 場合(ルート_ == nullの){ リターン ヌル } valをリスト =のArrayList <整数> () // 反復 / * valのスタック=スタック<のTreeNode>() VARルート= root_ しばらく(stack.isNotEmpty()||ルート! = NULL){ IF(ルート!= NULL){ stack.push(ルート) ルート= root.left }他{ ルート= stack.pop() list.add(root.`val`) ルート= root.right } } * / // 再帰 // 左> root->右 INORDER(リスト、root_) リターン coverHelp(リスト、0 、はlist.size - 1 ) } プライベートの楽しみINORDER(リスト:?のArrayList <整数>、ルート:ツリーノード){ 場合(ルート== nullの){ リターン } INORDER(リスト、root.left) list.add(root.` val`) INORDER(リスト、root.right) } プライベート楽しいcoverHelp(リスト:ArrayListを<整数>、左:INT、右:INT):TreeNodeの?{ 場合(左> 右){ 戻り ヌル } ヴァル半ば =(右+左)/ 2 ヴァルノード = ツリーノード(リスト[中間]) node.left = coverHelp(リスト、左、中- 1 ) node.right = coverHelp (リスト、ミッド+ 1 、右) リターンノード } }