Tree#
Apa itu tree? tree adalah struktur data, dimana bentuknya menyerupai tree (perumpamaan saja), aslinya structur data ini berbentuk mirip linkedlists-double hanya saja, perumpamaan cabang kiri (diganti dgn nama prev), cabang kanan (diganti dgn nama next)
Perbedaan#
Linkedlists itu monoton, alias saling sambung menyambung dan flat.
sedangkan tree tidak ada aturan harus saling menyambung, bisa saja linkedlists nya seperti ini
root -> next -> next -> next
(dimana ini nanti akan membuat tree yang gambar visualnya bakal menjorok kekanan)
jenis jenis transversal#
preorder (root, kiri, lalu ke-kanan)
inorder (kiri, root, lalu ke-kanan)
postorder (kiri, kanan, lalu ke-root)
nb: tranversal adalah cara mengunjungi simpul (tepat satu kali saja)
coding#
sudah cukup hal non teknisnya, bagian ini akan membahas bagian koding
struct#
struct untuk tree sangat mirip dgn struct untuk linked-list-double. di kasus ini struct dibawah hanya bisa hold data char saja. bisa diganti juga dgn int. dan lain lain
struct ListNode {
char val;
ListNode *prev;
ListNode *next;
ListNode(char x) : val(x), prev(nullptr), next(nullptr) {}
};
terlihat? selain hold data val
yang isinya char, kita ada opsi untuk hold pointer prev dan pointer next. dimana ini adalah kunci dari tree.
contoh meng-isinya#
ada tree seperti ini
ini contoh cara mengisinya
ListNode *head = new ListNode('A');
head->prev = new ListNode('B');
head->prev->prev = new ListNode('D');
head->prev->prev->next = new ListNode('G');
head->next = new ListNode('C');
head->next->next = new ListNode('F');
head->next->prev = new ListNode('E');
head->next->prev->prev = new ListNode('H');
head->next->prev->next = new ListNode('I');
kenapa tidak pakai val? karna ketika kita new ListNode('H');
, secara otomatis kita mengisi val. val baru dipakai ketika mau diakses.
contoh cara mengaksesnya#
contoh singkat ada dibawah, contoh (komplit) nya silahkan klik disini
inorder#
cout << "step 1: " << head->prev->prev->next->val <<
" " << head->prev->prev->val <<
" " << head->prev->val <<
" " << head->val <<
" " << head->next->prev->prev->val <<
" " << head->next->prev->val <<
" " << head->next->prev->next->val <<
" " << head->next->val <<
" " << head->next->next->val <<
endl;
postorder#
cout << "step 9: " << head->prev->prev->next->val <<
" " << head->prev->prev->val <<
" " << head->prev->val <<
" " << head->next->prev->prev->val <<
" " << head->next->prev->next->val <<
" " << head->next->prev->val <<
" " << head->next->next->val <<
" " << head->next->val <<
" " << head->val <<
endl;
preorder#
cout << "step 8: " << head->val <<
" " << head->prev->val <<
" " << head->prev->prev->val <<
" " << head->prev->prev->next->val <<
" " << head->next->val <<
" " << head->next->prev->val <<
" " << head->next->prev->prev->val <<
" " << head->next->prev->next->val <<
" " << head->next->next->val << endl;