bir diziden bir BST oluşturma

oy
1

Aşağıdaki (garip) bir şekilde bir ikili arama ağacı oluşturmak gerekir:

Bir dizi verilen am (A [n]). A [1] ağacın kökü olur.

  • Sonra, kökün (aşağıda kullanıldığı subtree1) bir [1] + A [2] sol alt ağacı eklemek ve aynı zamanda kök [1] A -A [2] sağ alt ağacı (subtree2) yerleştirin.

  • Ne [1] + A [2] + a [3] subtree1 sol alt ağacı (subtree3) eklemek için bir [1] + A [2] -A [3] subtree1 (subtree4) sağ alt ağacı.

  • Sonra, bir [1] -A eklemek [2] + a [3] subtree2 (subtree5) ve A [1] -A [2] -A [3] subtree2 sağ alt ağacı (subtree6 sol alt ağacı ).

  • Ben dizinin sonuna ulaşmak kadar subtree3, subtree4, subtree5, subtree6 için tekrarlayın.

Yani öncelikle dizinin ilk elemanı ağacının kökü olur ve o zaman aşağı hareket: Her sol alt ağaç değeri için üst biriminin toplamı artı dizisi ve her sağ alt ağacının yanındaki elemanı vardır değerin fark için gelmiştir üst ve dizideki bir sonraki elemanın.

Ben özyinelemeye ama değiştirilmiş şekilde kavramını kullanmak gerekir anlıyorum. Burada sorunumu Yazma ve beynimden dışında başka bir birisine açıklamaya çalışırken aslında beni denemek için bana bazı fikirler verdi bir şekilde bunu oluşturacak fakat yüzden belki verebilir Ben zamanki sorun olmaktan uğraşıyorum sorunu görebilirsiniz yapılan beni ağaç oluşturmak için özyineleme nasıl kullanılacağına ilişkin bazı öneriler.

Diğer sorular ve ben açıkça ben çözüm için ama buna rehberlik soran değilim emin olmak istedim bu yüzden bütün çözümler soran karşı bir politika olduğunu anlamaya tartışmalar etrafa. Birisi bir göz atmak isterseniz Zaten ne yaptığımı gösterebilir.

Oluştur 24/03/2011 saat 02:20
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Özyinelemeyi yapmanın yolu her zaman zaten elinde bir çalışma fonksiyonu var üstlenmektir. Öyleyse [Java sözdizimi kullanılarak] görelim ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

çalıştığını varsayalım. Sonra u endeksi i bir ağaç oluşturmak için ne yapmanız gerekir ki?

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

Bu temelde bu kadar. Sen uç örnekleri bakmak gerekir: index = Array.length, ilk düğümün yaratılması ve benzeri

Cevap 24/03/2011 saat 02:27
kaynak kullanıcı

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