 |
 |
| |
|
Search Engine |
|
Manfaatkan Google untuk memperoleh sejumlah informasi
yang Anda inginkan dalam hansmichael.com.
|
|
| Kutipan |
Bekerjalah untuk Tuhan. Rencana pensiunNya sungguh luar niasa.
Renungan Harian, 19 Oktober 2009
|
|
|
Tokoh Hari Ini
|
|
David A. Huffman
Dikenal sebagai penemu Huffman Code yang digunakan untuk kompresi data digital pada komputer, facsimile, modem, televisi dan banyak peripheral lainnya. Ia meninggal pada 7 Oktober 1999 dalam usia 74 tahun. Huffman Code disajikannya melalui sebuah paper saat ia kuliah di M.I.T. Ia menerima Golden Jubilee Award untuk inovasi teknologi dari IEEE Information Theory Society pada tahun 1998. Ia juga menerima Medali Richard W. Hamming dari IEEE pada tahun 1999 untuk kontribusinya yang luar biasa di Information Sciences. Pada akhir hidupnya Huffman adalah staf Departemen Computer Science di University of California di Santa Cruz, Amerika Serikat.
|
|
|
|
|
Struktur Data (IC210)
Contoh Soal
| 1. |
Tunjukkan struktur bit yang masing-masing menyusun variabel a dan b pada segmen program Pascal berikut
ini:
VAR
a:byte;
b:integer;
BEGIN
a:=100;
b:=-100;
END.
|
| 2. |
Sebuah bilangan bertipe single precision tersimpan dengan urutan byte
00 00 5B 40. Tentukanlah nilai desimal yang
disajikannya. |
| 3. |
Tulislah
dalam dua format notasi ekspresi lainnya:
-
**+ab+cd
-
*abc*+defa^^+*
-
*((((a*x)+b)*x)+c)/x
|
| 4. |
Dengan menggunakan teori
ranking, baik ranking ekspresi ataupun proper headnya,
periksalah valid tidaknya ekspresi-ekspresi berikut ini:
-
*abc*+def*+*
-
*ab+*cd-
-
*^/ab/cd
|
| 5. |
Tentukan
alamatnya (hexadecimal) dalam memory komputer, jika alamat awal adalah
L0=3A00 (hexadecimal):
- Elemen a[7,8], dari vektor a yang
dideklarasikan secara column-major order oleh:
VAR
a : ARRAY[1..20 , 1..10) OF word;
- Elemen b[-10,1], dari vektor b yang
dideklarasikan secara row-major order oleh: VAR
b : ARRAY[-13..1 , -5..4) OF single;
|
| 6. |
Double Precision
floating-point Turbo Basic membutuhkan 8 byte memory dengan struktur:
- 1 bit sign, 0 untuk positif dan 1
untuk negatif
- 11 bit exponen (radix), yang dibias
dengan +3FF
- 52 bit mantissa
- Dua nibble terakhir dibaca terlebih
dahulu sebelum nibble pertama. Demikian pula untuk setiap pasangan
word (seperti single precision), yaitu word terakhir dibaca dahulu;
kemudian untuk setiap pasangan byte, byte terakhir juga dibaca
terlebih dahulu. Catatan: 1 Nibble = 2 Word.
Berapa nilai double precision (dalam
desimal) yang ditunjukkan oleh urutan byte berikut:
(00 00 00 00 00 DB A0 0C)16 |
| 7. |
Sebuah stack
dapat digunakan untuk mengenali sejumlah pola. Perhatikan pola
STRING1#STRING2 dimana (selain yang di tengah sebagai separator) tidak ada
lagi pemakaian karakter # untuk string1 dan string2. Selain itu string2
harus merupakan kebalikan (reverse) dari string1. Tulislah:
Function MatchReverse (str : string) : boolean;
{true saat str adalah string yang polanya
cocok, dan false bila tidak}
Sebagai contoh, jika str='123&*O#O*&321'
atau str='ST#TS', hasilnya akan true, sebaliknya jika str='a2qd#dq3a',
hasilnya akan false. |
| 8. |
Sebuah array 1-dimensi (vektor)
dapat digunakan untuk menyimpan dua buah stack (DualStack), yang
pertama (Stack 1) penambahan elemennya dari ujung kiri bergerak ke kanan,
dan yang lain (Stack 2) dari ujung kanan bergerak ke kiri.

- Apakah kondisi yang menyebabkan Stack
1 kosong (empty)? Kapan pula Stack 2 kosong?
- Apakah kondisi yang menyebabkan Stack
1 penuh (full)? Kapan pula Stack 2 penuh?
- Untuk DualStack yang dideklarasikan
dengan:
CONST
MaxDualStackSize = 100;
TYPE
StackNo = 1..2;
InfoType = byte; {user defined data type}
DualStack = RECORD
top1, top2 : word;
StackStorage : ARRAY[1..MaxDualStackSize]
OF InfoType;
END;
Tulislah
3 (tiga) rutin di bawah ini:
Procedure
Initialize(VAR StackName: DualStack);
{untuk
inisialisasi DualStack bernama StackName}
Procedure
Push(VAR StackName: DualStack; No: StackNo; Data: InfoType);
{untuk
push Data ke dalam DualStack bernama StackName, nomor No}
Function
Pop(VAR StackName: DualStack; No: StackNo) : InfoType;
{untuk
pop/mendapatkan data dari DualStack bernama StackName, nomor No}
- Tulis sebuah program untuk membaca 25
bilangan bulat positif (byte), dan memasukkan seluruh elemen ini ke
dalam DualStack, semua yang gasal ke dalam stack 1, dan yang genap ke
dalam stack 2, dengan memanfaatkan ketiga subprogram yang telah dibuat
pada soal (d).
|
| 9. |
Dalam Turbo Basic single
precision menggunakan ukuran 4 byte (1 sign bit; 8 exponent
bit; 23 mantissa bit), dengan exponen bias 7F (hexadecimal).
Tentukan urutan 4 byte hexadecimal dalam memory komputer yang menyajikan
single precision -97,75. |
| 10. |
Konversikan ekspresi infix
berikut menjadi dua notasi lainnya (prefix dan sufix/postfix):
-
((A+B)*C-(D-E))^(F+G)
-
A*B+(C/(D-E))^(F-G)
|
| 11. |
Pada declaration part berikut, hitung alamat f[2,0,-1,85,11].e. dalam hexadecimal. Lokasi awal array f telah diketahui pada BA00. Tulis terlebih dahulu rumus
umumnya.
TYPE
a = RECORD
b:boolean;
c:char;
d:string[5];
e:word;
END;
VAR
f : ARRAY[1..2, -3..4, -5..6, 78..90, 11..12]
OF a;
|
| 12. |
Perhatikan declaration part sebuah program Pascal
berikut ini:
TYPE
salesman = RECORD
KodeSales = string[5];
NamaSales = string[30];
Golongan = char;
GajiPokok = real;
Tunjangan = real; END;
VAR
d : ARRAY[-12..5, 5..9] of salesman;
Jika data array tersebut diletakkan pada alamat memori
awal L0 = 1500 (desimal), tentukanlah alamat awal field
berikut (dalam desimal):
-
d[0,7].Tunjangan,
bila digunakan Row-Major Order.
-
d[0,9].Golongan,
bila digunakan Column-Major Order.
|
| 13. |
Tulis procedure
Balik_Queue(Q:Queue); yang berguna untuk membalik susunan elemen dalam
queue Q dengan menggunakan bantuan sebuah stack S. Diasumsikan procedure
dan function untuk operasi berikut sudah disediakan (tinggal dipakai saja),
yaitu:
|
| 14. |
Untuk Circulair Single
Linked Linear List berikut ini:

Tulis Procedure
DeleteNode(Head:PtrList; X:Infotype; Terhapus: boolean); yang
berfungsi untuk menghapus semua node yang berisi info X
dalam Circulair Single Linked Linear List yang dialamati oleh variabel Head.
Variabel Terhapus akan true jika dan hanya jika
list asal tidak empty dan minimal terdapat sebuah X dalam
list asal.
|
| 15. |
Tulislah algoritma atau program Pascal yang recursive
untuk:
-
Mencetak dalam urutan terbalik semua info /
data dari sebuah single linked linear list.
-
Mengubah info dari semua node pada sebuah binary
tree integer dengan ketentuan berikut:
Jika info dari sebuah node berisi bilangan genap,
maka info ini tidak berubah. Jika info dari sebuah node berisi bilangan gasal,
info dikalikan dua.
|
| 16. |
Tulislah function
Evaluasi_Polinomial(P:Polinomial; X:real) : real; yang berguna untuk
mendapatkan nilai sebuah polinomial P dengan harga X yang ditentukan.
Sebagai contoh untuk P yang menyajikan polinomial 5x^4-2x^3+10x-100
dan X=2, fungsi ini akan menghasilkan nilai 5*2^4-2*2^3+10*2-100 =
5*16-2*8+10*2-100 = -16. Tulis lebih dahulu deklarasi type linked list
untuk menyajikan polinomial. |
| 17. |
Inorder successor
biasa digunakan pada procedure untuk penghapusan sebuah node dari sebuah
binary search tree. Kali ini perhatikanlah bahwa penghapusan sebuah node
dari sebuah binary tree dapat dilakukan dengan memperhatikan (mendapatkan
terlebih dahulu) inorder predecessor-nya.
-
Tulislah fungsi untuk
mendapatkan inorder predecessor dari sebuah node dalam sebuah binary
search tree.
Bantuan: Input
dan Output fungsi ini masing-masing adalah sebuah pointer type Binary
Search Tree yang digunakan; sedangkan parameter input adalah pointer
ke node n, dimana n^.right menunjuk node yang akan dicari inorder
predecessor-nya.
-
Jelaskan semua kasus
yang mungkin terjadi pada procedure penghapusan ini. Jika diperlukan
sertakan gambar untuk mempertajam penjelasan anda.
-
Tulis sebuah
procedure recursive melalui algoritma atau program Pascal untuk
menghapus sebuah node dari sebuah binary tree dengan menggunakan
fungsi pada soal (a) dan memperhatikan semua kasus pada soal (b).
|
| 18. |
Gambarkan:
-
Binary Search Tree
yang dihasilkan dari urutan pengisian data berikut: 20, 16, 30, 60, 80, 40,
10, 25, 27, 15, 13, 14, 12, 48, 35, 38
-
Tuliskan penyajian jawaban
(a) dengan menggunakan diagram venn.
-
Kumpulan poket yang
dihasilkan dan kemudian list baru hasil penggabungan poket pada
iterasi pertama saja dari pengurutan data berikut dengan menggunakan
radix sort: 90, 100, 109, 1, 105,
5, 50, 2, 20, 21, 12, 9, 99, 9, 95
-
Sparse matriks untuk:
| 2 |
4 |
0 |
7 |
| 0 |
5 |
0 |
0 |
| 0 |
6 |
0 |
0 |
| 0 |
1 |
0 |
3 |
-
General Tree yang
disajikan dengan nested parentheses berikut ini:
( 20 ( 30 (70 80 (77 88
(88) 99 77 ) ) 40 (95) 50 11 33) )
-
Penyajian general
tree pada soal (e) dengan menggunakan binary tree.
|
| 19. |
Binary Increment. Perhatikanlah
deklarasi sebuah singly linked linear list berikut ini:
TYPE
PtrBiner = ^Biner
biner
= RECORD
bit : 0..1;
link : PtrBiner;
END;
Seluruh node linked list
menyajikan sebuah bilangan biner b1b2.....bn, dimana bi hanya mungkin
berisi 0 atau 1. Jika singly linked linear list bertipe PtrBiner -- yang
field 'bit' di dalamnya merupakan rangkaian b1b2.....bn -- digunakan
untuk menyajikan sebuah bilangan biner, tulislah sebuah Procedure
Increment(VAR BilBiner : PtrBiner); yang berguna untuk menambah
satu bilangan biner yang alamatnya ditunjukkan dengan BilBiner. Catatan:
Recursive akan sangat membantu. |
| 20. |
Shuffle Merge (yang
dimodifikasi)
Shuffle-merge dari dua
buah list X1, X2, ..... Xn dan Y1,
Y2, ..... Ym adalah:
X = X1, Y1,
X2, Y2, ..... Xn, Yn, Yn+1,
Yn+2, ..... Ym ; jika n<m
atau
X = X1, Y1,
X2, Y2, ..... Xm, Ym, Ym+1,
Ym+2, ..... Ym ; jika n>m
Tulislah Procedure
ShuffleMerge(VAR X : ListType; Y : ListType); untuk melakukan
shuffle merge dua buah list yang head nodenya ditunjukkan oleh X dan Y.
Namun demikian perhatikan bahwa hasil penggabungan disimpan ke dalam list
X. Tidak menjadi masalah apabila isi list Y akan rusak / kosong. Dalam hal
ini penggabungan dilakukan dengan menyisipkan elemen-elemen Y1, Y2, ......
ke tempat yang sesuai (antara X1 dan X2, antara X2 dan X3, dan seterusnya),
tanpa mengalokasikan sebuah elemenpun dengan perintah New (termasuk
tidak diijinkan menggunakan procedure InsertFirstList atau InsertLastList). |
| 21. |
Jika semua operasi stack berikut telah disediakan:
InitStack(S), Push(S,X), Pop(S); IsStackEmpty(S), IsStackFull(S),
tulislah algoritma / pseudo-code untuk menampilkan hasil penjumlahan dua
buah "bilangan" bulat positif yang sangat panjang, yang diinput melali
keyboard. Bahasa pemrograman pada umumnya sudah tidak dapat melakukannya
lagi. Contoh: 637250569987999999786549876342589776543981234567 (Bil1)
9012348756589129876543212345678999 (Bil2)
------------------------------------------------ +
637250569988009012135306465462466319756326913566 (Hasil)
Bil1 dan Bil2 dimasukkan melalui keyboard. Sebenarnya keduanya
bukanlah integer, melainkan hanya string yang berisi rangkaian character
yang panjang. Pengisian "bilangan" dilakukan sampai tombol enter
ditekan. Hasil yang ditampilkan program Anda juga bukan merupakan
variabel integer tunggal, melainkan hanyalah tampilan rangkaian karakter,
walaupun bila diperiksa merupakan hasil penjumlahan yang tidak salah. Petunjuk: Gunakan 3 stack dan bekerjalah dari kanan ke kiri. |
| 22. |
Dengan memanfaatkan
sejumlah operasi queue tulis program Pascal untuk memeriksa sebaris karakter
yang dimasukkan melalui keyboard. Data input diasumsikan terdiri dari 2
bagian yang dipisahkan oleh sebuah colon (:). Sebagai output, algoritma ini
akan mencetak keterangan:
-
'NO COLON' jika tak ada
colon pada data input
-
'LEFT' jika bagian kiri
(sebelum colon) lebih panjang daripada bagian kanan
-
'RIGHT' jika bagian
kiri (sebelum colon) lebih pendek daripada bagian kanan
-
'SAME' jika bagian kiri
dan kanan sama panjangnya
Catatan:
-
Sama atau tidaknya isi
bagian kiri dan isi bagian kanan tidak perlu diperiksa.
-
Operasi-operasi dasar
queue dianggap telah disediakan, namun demikian tulislah kembali header
function/procedure-nya.
Contoh:
| Data Input |
Keterangan yang Dihasilkan |
| abcdefghijk |
NO COLON |
| abcde:pqrst |
SAME |
| abcdefg:xyz |
LEFT |
| abc:tuvwxyz |
RIGHT |
|
| 23. |
Tulislah
deklarasi type pada Pascal untuk implementasi queue dengan menggunakan dynamic
allocation memory (pointer). Type datanya adalah record mahasiswa yang
terdiri dari dua field, yaitu Nama (string[30]) dan NRP (string[8]).
Dengan menggunakan deklarasi tersebut tulis Function Size (Q:Queue):LongInt; yang berguna untuk mendapatkan jumlah elemen queue. |
| 24. |
Pools untuk Garbage Memory
Management. Bila sebuah vektor
yang menyajikan singly linked linear list L telah berisi data-data berikut:
| Index |
Data |
Link |
| 1 |
John |
0 |
| 2 |
Timothy |
4 |
| 3 |
Paul |
2 |
| 4 |
James |
6 |
| 5 |
Matthew |
3 |
| 6 |
Luke |
1 |
First=5, Pools=0,
MaxSize=6
Tulislah:
-
PROCEDURE
insert(X,Pred,L,Ok,): untuk menyisipkan X setelah data pada
alamat fisik Pred dari list L, Ok=TRUE jika operasi berhasil dilakukan.
-
PROCEDURE
delete(Pred,L,Ok): untuk
menghapus data dari list L yang alamatnya ditunjukkan oleh Pred,
Ok=TRUE jika operasi berhasil dilakukan.
Gambarlah penyajian list
dalam bentuk diagram:
-
untuk tabel di atas.
-
keadaan tabel di atas,
setelah urutan proses: delete(5,L,Ok); delete(2,L,Ok);
insert('Titus',1,L,Ok); delete(4,L,Ok); jika metode yang dipakai
adalah pembentukan pools segera setelah sebuah elemen dihapus.
|
| 25. |
Generalized List
TYPE
ListPointer = ^ListNode;
ListNode = RECORD
link : ListPointer;
CASE tag : BOOLEAN OF
FALSE : (data : CHAR);
TRUE : (dlink: ListPointer);
END;
Perhatikan bahwa
deklarasi di atas memungkinkan untuk menyajikan sebuah generalized list. Kemudian perhatikanlah function berikut ini:
FUNCTION
mystery(p : ListPointer) : ListPointer;
VAR
q : ListPointer;
BEGIN
q := NIL;
IF p <> NIL THEN
BEGIN
new(q);
q^.tag := p^.tag;
IF NOT p^.tag
THEN q^.data := p^.data
ELSE q^.dlink := mystery(p^.dlink);
q^.link := mystery(p^.link);
END;
mystery := q;
END;
{of mystery}
Apakah tujuan function
mystery di atas? Jelaskan dengan singkat. |
| 26. |
Perhatikan "silsilah keluarga" Raden
Bagus Sastro di bawah ini:
-
Sastro
mempunyai anak Budi, Wati, Susi dan Amir
-
Susi
mempunyai anak Tejo dan Hasan
-
Amir
mempunyai anak Didi dan Andi
-
Wati
mempunyai anak Maria
-
Maria
mempunyai anak Tedy
-
Didi
mempunyai anak Linda dan Wahjuni
-
Tejo
mempunyai anak Wijaya, Rosalina dan Sugiharto
-
Gambarlah terlebih
dahulu General Tree yang menyajikan silsilah keluarga di atas.
-
Gambarlah Binary
Tree yang menyajikan general tree di atas.
-
Tunjukkan urutan node
yang dikunjungi, jika pada Binary Tree tersebut dilakukan traversal
secara: Inorder, Preorder dan Postorder.
|
| 27. |
- Gambarlah general tree yang
menyajikan ekspresi aritmatika berikut: (a
+ b + c)*e - f(g,h,i,j) + k / log(m) ^ n
-
Gambarlah tiga buah
linked list, yang masing-masing adalah keadaan ketika pass ke-1, ke-2,
dan ke-3 berakhir untuk pengurutan data berikut dengan Radix Sort: 909, 78, 89, 79, 9, 7, 97, 87, 777, 77,
99, 98, 798, 897, 888. Anda
tidak perlu memperhatikan ataupun menggambar susunan pocketnya.
-
Gambarlah Binary
Search Tree yang dibentuk dengan mengisikan bilangan berikut secara
urut: 50, 46, 43, 80, 90,
75, 49, 48, 77, 76 -
Sajikan tree pada soal
(c) dengan Nested Parentheses (Kurung Bersarang).
-
Sajikan tree pada soal
(c) dengan Diagram Venn.
|
| 28. |
Breadth First Search
(BFS) adalah salah satu traversal pada Binary Tree, yang dilakukan
dengan melakukan penelusuran tree mulai dari level 1 (root) sampai ke level
terbawah, dimana dalam setiap level melakukan penelusuran mulai dari node
kiri ke node kanan. Kunci: penyelesaian BFS adalah penggunaan
struktur data Queue.
Bila rutin operasi
queue berikut sudah disediakan (tinggal dipakai saja), yaitu:
- Procedure InsertQueue(data,queue);
- Procedure DeleteQueue(data,queue);
- Function EmptyQueue(queue): boolean ;
Tulislah procedure
BFS(BTree); yang berguna untuk melakukan kunjungan -- dan sekaligus
mencetak isi informasi setiap node yang dikunjungi ke layar komputer -- terhadap seluruh node dalam binary tree BTree secara BFS. |
| 29. |
Threaded Binary Search Tree. Pada
sebuah Threaded Binary Search Tree, berturut-turut akan diisikan data
berikut: 28, 45, 87, 20, 14, 40, 46, 91, 22, 29
Gambarlah diagram pohon setelah pengisian
data di atas selesai dilakukan. Perhatikan bahwa jika biasanya digunakan
lingkaran kecil untuk menunjukkan sebuah node, untuk jawaban soal ini,
gantikan dengan bentuk kotak kecil, yang field-fieldnya terbagi seperti
gambar ini:
| LPtr |
LFlag |
Info |
RFlag |
RPtr |
LFlag dan RFlag adalah boolean, yang jika
TRUE=Thread Link dan jika FALSE=Structural Link. Pada gambar
anda, seluruh garis dengan mata panah keluar dari LPtr dan RPtr; sedangkan
LFlag, Info, dan RFlag harus diganti dengan nilai-nilai boolean (T/F) dan
numerik, sesuai dengan data yang diisikan. |
| 30. |
Recursive Delete pada Binary Search Tree. Pada
sebuah Binary Search Tree, berturut-turut akan diisikan data berikut: 50, 78, 22, 17, 38, 35, 43, 25, 33,
30, 27, 29, 28, 37, 32 Gambarlah diagram pohon sebelum penghapusan
dilakukan (Hati-hati. Jika salah, semua jawaban untuk soal berikut juga akan
salah). Jika penghapusan dilakukan untuk node yang berisi 22,
hitunglah:
- Berapa kali pemanggilan Procedure Delete
(recursive) dilakukan? Hati-hati dalam menjawabnya, hitung
baik-baik, dan pemanggilan procedure dari program / algoritma utama
tidak dihitung.
- Berapa kali segmen program/algoritma
pencarian successive inorder dari suatu node dilakukan? Dan node
mana (sebutkan isi infonya) saja yang mencari successive inordernya?
- Berapa kali penggantian isi field
info dilakukan? Sebutkan pasangan-pasangan info dari node yang
diganti dan node penggantinya.
|
| 31. |
Manipulasi Binary Tree. Perhatikan
definisi tipe data untuk binary tree yang ditulis melalui Pascal berikut ini:
TYPE
DataType = Word;
Tree = ^Node;
Node = RECORD
Info : DataType;
Left, Right : Tree;
END;
Tulislah program Pascal atau sub algoritma
fungsi untuk:
- Memeriksa apakah pointer Ptr menunjuk kepada suatu node leaf. (Jika Leaf=True). FUNCTION
IsLeaf(Ptr: Tree): Boolean;
- Menghitung nilai total jumlah
field Info dari semua node pada sebuah binary tree Root. FUNCTION Sum(Root: Tree): LongInt;
- Memeriksa apakah binary tree Root adalah complete binary tree. (Jika Complete=True). FUNCTION
IsComplete(Root: Tree): Boolean;
|
| 32. |
Manipulasi Binary Tree II. Tulislah
algoritma / program Pascal atau algoritma untuk menghapus semua node leaf pada binary tree Root. Harus menggunakan Function
IsLeaf (soal 31.a). Pakailah definisi tipe data seperti soal nomor 31. FUNCTION DeleteAllLeaf(VAR Root : Tree); |
| 33. |
Analisis Algoritma Radix Sort
Versi "Pandai". Jawablah dengan singkat:
-
Pada
algoritma Radix Sort versi "Pandai" untuk proses sorting 1000
node linked list dengan kapasitas sebuah node sebesar 8 byte, dan
sorting akan dilakukan sebanyak 5 pass, berapakah ukuran memory ekstra
yang dibutuhkan? Jelaskan jawaban Anda.
-
Jelaskan
secara detil proses berpindahnya sebuah node linked list ke dalam pocket
yang sesuai pada sorting Radix Sort versi "Pandai". Lengkapi
jawaban Anda dengan potongan pseudo code/program, kemudian hubungkan
dengan contoh gambar linked list yang salah satu nodenya akan dipindah
ke dalam pocket. Gambar linked listnya terserah Anda.
|
| 34. |
Untuk sebuah node pada contoh binary
search tree (BST) di bawah ini anggaplah field-fieldnya adalah Data, Left,
dan Right. 
- Tulislah algoritma PROCEDURE Double(Root) untuk
menggandakan seluruh node dalam sebuah binary search tree. Sebagai
contoh untuk tree di atas elemen-elemennnya akan berubah menjadi 90, 64,
112, 76, dan seterusnya.
- Tulislah algoritma PROCEDURE ReverseBFS(Root)
untuk mencetak semua data pada tree secara "Reverse Breadth-First
Traversing" yaitu mulai ujung kanan level tree terakhir sampai
root, sehingga data yang dicetak untuk tree di atas adalah: 54, 46, 78,
49, 38, 56, 32, 45. Petunjuk: Gunakan queue dan stack bertipe
pointer. Anggaplah rutin-rutin berikut telah tersedia: InitQueue(Q),
Insert(Q,X), Delete(Q), IsQueueEmpty(Q), InitStack(S), Push(S,X), dan
Pop(S).
- Mereferensi procedure delete sebuah node dari BST
seperti dijelaskan melalui handout, gambarlah ulang tree di atas,
kemudian tunjukkan dengan sejumlah panah untuk arah pointer p, q, rp, s,
f, tepat ketika data pada root (45) akan dihapus.
|
|
 |
 |