sıralama Dizisi Bir İkili Arama ağaç Java eklemeden önce

oy
0

Şu sipariş AZ içinde olan dizelerden oluşan bir dizi var. Ben dengeli bir ikili arama ağacı onları sıralama hakkında gitmek için en iyi yolu merak ediyorum. Benim ilk düşünce ilk yarısında ve ikinci yarısında içine diziyi bölmek ve sonra bunları tek tek sıralamak etmektir.

Ben ağaç için bir sonraki Düğümü almak için ikiye bölme tutmak için özyinelemeli yolunu kullanabilir olması gerekmez mi? Sadece şu anda başım çevresinde sarın ve herhangi bir herhangi bir fikir olsaydı rica ediyorum düşünce olamaz. doğru yönde bana yol veya bazı örnekler sağlamak. Teşekkürler!

i BinaryTree Sınıf ve BinaryTreeNode Sınıf kendi kullanıyorum. DÜZENLE:

public class BinaryTree {
private BinaryTreeNode root;

public void insert(String text) {

root = insertNode(root, text); 

}

private BinaryTreeNode insertNode(BinaryTreeNode curNode, String text) {
if (curNode == null) {
    BinaryTreeNode newNode = new BinaryTreeNode(text);
    //newNode.value = text;
    return newNode;
} else {
    if (text.compareTo(curNode.value) < 0 ) {
        //left child
        //use of recursion to properly place Node
        curNode.left = insertNode(curNode.left, text);
        return curNode;
    }

        else {

        //right
        //use of recursion to properly place Node
        curNode.right = insertNode(curNode.right, text);
        return curNode;
    }
}

}

public BinaryTreeNode getRoot() {
return root;
}

 public void setRoot(BinaryTreeNode root) {
this.root = root;
 }
 }

Bu ikili arama ağacı dengeleme bir Self olarak düşünülebilir?

Oluştur 07/11/2011 saat 09:32
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Eğer bir ikili arama ağacı varsa o diziyi önceden sıralamak için oldukça muhtemelen karşı-üretken kendini dengeleyen. optimal dengeli bir ağaca sıralandığını eklemek için algoritma sırasız veri eklemek için algoritma oldukça farklıdır.

Ancak yayınlanan kod hakkında hiçbir şey öz dengeleme 'yoktur. Bu sadece sıradan bir ikili ağaç ekleme algoritmasıdır.

Cevap 07/11/2011 saat 09:37
kaynak kullanıcı

oy
1

Ağacın öz dengeleme olmak görünmüyor. Bir kendini dengeleyen BST bir takıldıktan sonra, adımları atacaktır veya eklemelerin bir dizi sonra, (kabaca) dengeli olmasını sağlamak için.

Yalnızca elemanları kez ekleyebilir ve sadece için okur ağacı kullanırsanız, sizin sıralanmış dizi var ve sonra aşağıdaki işlemleri: ortada öğeyi seçin. anahtar olarak onunla kökü oluşturmak ve sonra yinelemeli sırasıyla sağ alt ağaç olarak sağ tarafa kökün sol alt ağaç olarak sol (küçük elementler) için öğeleri ve öğeleri ekleyebilirsiniz. Daha fazla veya daha az dengeli olan bir BST ile bitirmek gerekir. Örnek kod:

public class BinaryTree {

    /* ... */


    //each recursive call receives a pair of bounds for the part of the 
    //array it has to process: left and right
    public static BinaryTreeNode nodeFromSortedArray(String[]a,
                                           int left, int right){

        if (right<left) return null;

        if (right==left)
            return new BinaryTreeNode(a[left]);

        int mid = (left+right)/2;

        //create node from middle element
        BinaryTreeNode n = new BinaryTreeNode(a[mid]);

        //recursively add elements to the left as its right subtree
        n.left = nodeFromSortedArray(a, left, mid-1);

        //recursively add elements to the right as its right subtree
        n.right = nodeFromSortedArray(a, mid+1, right);

        return n;
    }

    public static BinaryTree fromSortedArray(String[]a){
        BinaryTree bt = new BinaryTree();
        bt.setRoot(nodeFromSortedArray(a,0,a.length-1));
        return bt;
    }

    /* ... */
}

Ancak, bu durumda, sadece sıralanmış diziye sizin elemanlarını tutmak ve bunun yerine bir ağacın, içine dizine ikili arama kullanabilirsiniz. karmaşıklığı aynı, O (logn) olmalı, ama daha az referanslar şeyi saklamak gerekir ve önbellek performansı iyi olmalıdır.

Eğer bir değişken ağacı var ve verimli olmak için gerekiyorsa, muhtemelen kendine dengeli, önemli değil amacıyla hangi size elemanlarını eklemek bu durumda yapmak gerekiyordu.

Cevap 07/11/2011 saat 09:51
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more