1382バランスのバイナリ検索ツリー

パッケージ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 、右)
         リターンノード
    } 
}

 

おすすめ

転載: www.cnblogs.com/johnnyzhao/p/12503394.html