kiegyensúlyozott bináris keresési fa felhasználásával sortedset

szavazat
0

Kérem, segítsen Megpróbáltam, hogy létrehoz egy véletlenszerű bináris keresési fa mérete 1024 és az elemek kell lennie véletlen sortedset ... képes vagyok levelet kódot létrehozni egy bináris keresési fa kézzel hozzáadásával elemeket kézzel, de én m unablele yo levelet kódot, ami generál egy véletlen kiegyensúlyozott bináris fa mérete 1024 majd próbálja megtalálni a kulcsot, hogy a fa ... kérem kérem, és köszönöm előre u ....

Szerkesztése hozzá a kódot hozzászólás

ya ez házi feladat ... és ez az, amit kaptam, amennyiben kód:

using System; 
namespace bst { 
    public class Node { 
        public int value; 
        public Node Right = null; 
        public Node Left = null; 

        public Node(int value) 
        { 
            this.value = value; 
        } 
    } 

    public class BST { 
        public Node Root = null; 
        public BST() { }

        public void Add(int new_value) 
        { 
            if(Search(new_value)) 
            {
                Console.WriteLine(value ( + new_value + ) already);
            }
            else
            {
                AddNode(this.Root,new_value);
            }
        }
    }
}
A kérdést 21/01/2011 00:53
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
2

Használja a rekurziót. Minden ág létrehoz egy új ága, válassza ki a középső elem a szétválogatás nélküli készlet, a medián. Tedd az aktuális tétel a fán. Másolás az összes elem kevesebb, mint az átlagos egy másik tömb, Levél, hogy az új tömb a hívás ugyanazzal a módszerrel. Másolás az összes elem nagyobb, mint az átlagos egy másik tömb, Levél, hogy az új tömb a hívás ugyanazzal a módszerrel. \

Kiegyensúlyozott fák van, hogy páratlan számú példány, kivéve, ha a fő szülőcsomópont nincs kitöltve. El kell döntenie, ha van két értékek, amelyek a Medián, hogy az ismétlődő tartozik az alsó ág vagy a felső ág. Tettem ismétlődések a felső ág példámat.

A medián lesz a száma, ahol azonos mennyiségű szám kisebb, mint nagyobb, mint a szám. 1,2,3,3,4,18,29,105,123 Ebben az esetben a medián értéke 4, bár az átlagos (vagy átlag) jóval magasabb.

Nem tartalmazhat olyan kódot, amely meghatározza a medián.

BuildTreeItem(TreeItem Item, Array Set)  
{
  Array Smalls;
  Array Larges;
  Median = DetermineMedian(Set);
  Item.Value = Median;
  if(Set.Count() == 1)
    return;  
  for (int i = 0; int i < Set.Count(); i++)
  {
    if(Set[i] < Median)
    {
      Smalls.new(Set[i]);
    }
    else
    {
      Larges.new(Set[i]);
    }
  }
  Item.Lower = new TreeItem;
  Item.Upper = new TreeItem;
  BuildTreeItem(TreeItem.Lower, Smalls);
  BuildTreeItem(TreeItem.Upper, Larges);
}
Válaszolt 21/01/2011 01:13
a forrás felhasználó

szavazat
0

Kivéve, ha a házi feladatot a legegyszerűbb megoldás az lenne, hogy az adatok rendezésének az első, majd építeni egy fa felhasználásával középső elem root és lemenjen minden fele. Által javasolt módszer Xaade hasonló , de sokkal lassabb miatt DetermineMedian összetettségét .

A másik lehetőség az, hogy ténylegesen nézd algoritmusokat építeni kiegyensúlyozott fák (mint http://en.wikipedia.org/wiki/Red-black_tree ), hogy ha ez megfelel az Ön igényei szerint.

EDIT: eltávolítja a helytelen állítást sebessége Xaade algoritmus - valójában olyan gyorsan, amilyen gyorsan sort (n log n - ellenőrizze az egyes elemek minden szintjén rekurzió log n szinten rekurzió), nem tudom, miért becsülik meg lassabb.

Válaszolt 21/01/2011 02:42
a forrás felhasználó

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