RANGKUMAN STRUKTUR DATA

Taufik Akhmad Setiadi

Graf

Graf adalah kumpulan noktah (simpul) di dalam bidang dua dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapat digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Representasi visual dari graph adalah dengan menyatakan objek sebagai noktah, bulatan atau titik (Vertex), sedangkan hubungan antara objek dinyatakan dengan garis (Edge).
G = (V, E)
Dimana
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
Graf merupakan suatu cabang ilmu yang memiliki banyak terapan. Banyak sekali struktur yang bisa direpresentasikan dengan graf, dan banyak masalah yang bisa diselesaikan dengan bantuan graf. Seringkali graf digunakan untuk merepresentasikan suaru jaringan. Misalkan jaringan jalan raya dimodelkan graf dengan kota sebagai simpul (vertex/node) dan jalan yang menghubungkan setiap kotanya sebagai sisi (edge) yang bobotnya (weight) adalah panjang dari jalan tersebut.
Ada beberapa cara untuk menyimpan graph di dalam sitem komputer. Struktur data bergantung pada struktur graph dan algoritma yang digunakan untuk memmanipulasi graph. Secara teori salah satu dari keduanya dapat dibedakan antara struktur list dan matriks, tetapi dalam penggunaannya struktur terbaik yang sering digunakan adalah kombinasi keduanya.
Graph tak berarah (undirected graph atau non-directed graph) :
Urutan simpul dalam sebuah busur tidak dipentingkan. Misal busur e1 dapat disebut busur AB atau BA
Graph berarah (directed graph) :
Urutan simpul mempunyai arti. Misal busur AB adalah e1 sedangkan busur BA adalah e8.
Graph Berbobot (Weighted Graph)
Jika setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul, maka busur tersebut dinyatakan memiliki bobot.
Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari 2 buah titik, jumlah rata-rata kendaraan perhari yang melalui sebuah jalan, dll.



2. Istilah-istilah dalam graf
Kemudian terdapat istilah-istilah yang berkaitan dengan graph yaitu:
a. Vertex
Adalah himpunan node / titik pada sebuah graph.
b. Edge
Adalah himpunan garis yang menghubungkan tiap node / vertex.
c. Adjacent
Adalah dua buah titik dikatakan berdekatan (adjacent) jika dua buah titik tersebut terhubung dengan sebuah sisi. Adalah Sisi e3 = v2v3 insident dengan titik v2 dan titik v3, tetapi sisi e3 = v2v3 tidak insident dengan titik v1 dan titik v4.
Titik v1 adjacent dengan titik v2 dan titik v3, tetapi titik v1 tidak adjacent dengan titik v4.



d. Weight
Adalah Sebuah graf G = (V, E) disebut sebuah graf berbobot (weight graph), apabila terdapat sebuah fungsi bobot bernilai real W pada himpunan E,
W : E ® R,
nilai W(e) disebut bobot untuk sisi e, " e Î E. Graf berbobot tersebut dinyatakan pula sebagai G = (V, E, W).
Graf berbobot G = (V, E, W) dapat menyatakan
* suatu sistem perhubungan udara, di mana
· V = himpunan kota-kota
· E = himpunan penerbangan langsung dari satu kota ke kota lain
· W = fungsi bernilai real pada E yang menyatakan jarak atau ongkos atau waktu
* suatu sistem jaringan komputer, di mana
· V = himpunan komputer
· E = himpunan jalur komunikasi langsung antar dua komputer
· W = fungsi bernilai real pada E yang menyatakan jarak atau ongkos atau waktu
e. Path
Adalah Walk dengan setiap vertex berbeda. Contoh, P = D5B4C2A Sebuah walk (W) didefinisikan sebagai urutan (tdk nol) vertex & edge. Diawali origin vertex dan diakhiri terminus vertex. Dan setiap 2 edge berurutan adalah series. Contoh, W = A1B3C4B1A2.
f. Cycle
Adalah Siklus ( Cycle ) atau Sirkuit ( Circuit ) Lintasan yang berawal dan berakhir pada simpul yang sama 


Contoh Representasi Graph dalam bahasa C

typedef struct vertex

{

char nama[100];

float x, y;

float status;

float jarak;

struct vertex *next,*connector;

};

typedef struct vertex *pvertex;

typedef struct edge

{

float jarak;

char titik1[100];

char titik2[100];

edge * next;

};

typedef struct edge * garis;

garis awalga = NULL, akhirga= NULL;

pvertex makeptree (float x, float y, char nama[])

{

pvertex baru;

baru=(pvertex)malloc(sizeof(struct vertex));

baru->x=x;

baru->y=y;

baru->status=0;

baru->next=NULL;

baru->connector=NULL;

strcpy(baru->nama,nama);

}

void makevertex (pvertex *vertex,float x,float y,char nama[])

{

pvertex p , q ;

p = makeptree(x,y,nama);

q = *vertex;

if(q == NULL)

*vertex = p ;

else

{

for(;q->next;q=q->next)

{

}

q->next = p;

}

}

void makeedge(garis * awalga, garis * akhirga, char titik1[], char titik2[], float jarak)

{

garis baru;

baru=(garis)malloc(sizeof(edge));

baru->jarak=jarak;

strcpy(baru->titik1,titik1);

strcpy(baru->titik2, titik2);

if(*awalga==NULL)

{

*awalga=baru;

*akhirga=baru;

}

else

{

(*akhirga)->next=baru;

(*akhirga)=baru;

}

}

void cek(pvertex vertex, int jumlah)

{

pvertex awal,p,q;

float jarak;

float min ;

float temp;

awal = vertex;

p = awal;

for(int i=0;i

{

min = 999;

p->status =1;

for(q=awal->next;q!=NULL;q=q->next)

{

if(q->status!=1)

{

jarak=(((p->x)-(q->x))*((p->x)-(q->x)))+(((p->y)-(q->y))*((p->y)-(q->y)));

jarak=sqrt(jarak);

if (min>jarak)

{

min = jarak;

p->jarak = min;

p->connector = q;

}

makeedge(&awalga,&akhirga,p->nama,q->nama,p->jarak);

}

}

p = p->connector;

}

temp=(((p->x)-(awal->x))*((p->x)-(awal->x)))+(((p->y)-(awal->y))*((p->y)-(awal->y)));

p->jarak = sqrt(temp);

p->connector = awal;

}

void displayedge(pvertex vertex,int jumlah)

{

pvertex list = vertex;

float tot;

tot += vertex->jarak;

printf("\n\t%s ke %s\n", list->nama,list->connector->nama);

list = list->connector;

for(int a=0; a

{

printf("\n\t%s ke %s\n", list->nama,list->connector->nama);

tot += list->jarak;

list = list->connector;

}

printf("\n");

}






Pohon Biner (Binary tree)


Sebuah pohon biner sederhana dengan lebar 9 dan tinggi 3, dengan sebuah akar yang memiliki nilai 2
Dalam ilmu komputer, sebuah pohon biner (binary tree) adalah sebuah pohon struktur data dimana setiap simpul memiliki paling banyak dua anak. Secara khusus anaknya dinamakan kiri dan kanan. Penggunaan secara umum pohon biner adalah Pohon biner terurut, yang lainnnya adalah heap biner.

Definisi untuk pohon berakar
  • Sebuah panah langsung mengacu pada penghubung dari ayah ke anak nya (panah di gambar dalam pohon).
  • Akar dari pohon adalah simpul tanpa ayah. Terdapat paling banyak satu akar dalam pohon berakar.
  • Sebuah daun adalah simpul yang tidak memiliki anak.
  • Kedalaman sebuah simpul n adalah panjang jalan dari akar ke simpul. Himpunan semua simpul pada kedalaman yang diberikan kadang-kadang dinamai dengan Tingkat (Level) dari pohon. Akar memiliki kedalaman kosong.
  • Tinggi sebuah pohon adalah panjang jalan dari akar ke daun-daunnya.
  • Saudara adalah simpul yang memiliki ayah yang sama
  • Jika terdapat sebuah jalan dari simpul p ke simpul q, dimana simpul p lebih dekat ke akar daripada q, maka p adalah leluhur dari q dan q adalah keturunan p.
  • Lebar daris sebuah simpul adalah jumlah keturunan termasuk simpul itu sendiri.
Jenis pohon biner
  • Sebuah pohon biner berakar (rooted binary tree) adalah sebuah pohon berakar dimana setiap simpul paling banyak mempunyai dua anak
  • Sebuah pohon biner penuh (full binary tree), atau pohon biner asli (proper binary tree), adalah sebuah pohon dimana setiap simpul mempunyai nol atau dua anak.
  • Sebuah pohon biner sempurna (perfect binary tree) (atau kadang-kadang pohon biner lengkap (complete binary tree) adalah sebuah pohon biner penuh dimana semua daun memiliki kedalaman yang sama.
  • Sebuah pohon biner lengkap (complete binary tree) dapat didefinisikan juga sebagai sebuah pohon biner penuh dimana semua daunnya memiliki kedalanam n atau n-1 untuk beberapa n. Agar sebuah pohon dapat menjadi sebuah pohon biner lengkap, semua anak pada tingkat terakhir harus menempati titik terkiri secara teratur, dengan tidak ada titik yang menganggur di antara keduanya. Sebagai contoh, jika dua simpul pada tingkat terbawah masing-masing menempati sebuah titik dengan suatu titik kosong di antara keduanya, tetapi sisa simpul anaknya terhimpit tanpa titik di antaranya, maka pohon tersebut tidak dapat membentuk sebuah pohon biner lengkap karena titik kosong tersebut.
  • Sebuah pohon biner lengkap berakar (rooted complete binary tree) dapat dikenali dengan magma bebas.
  • Sebuah pohon biner hampir lengkap (almost complete binary tree) adalah sebuah pohon diaman setiap simpul yang mempunyai anak kanan juga memiliki anak kiri. Memiliki anak kiri tidak memerlukan sebuah simpul untuk mempunyai anak kanan. Penjelasan lainnya, sebuah pohon biner hampir lengkap adalah sebuah pohon dimana untuk sebuah anak kanan, selalu terdapat anak kiri, tetapi untuk sebuah anak kiri, tidak selalu terdapat sebuah anak kanan.
  • Jumlah simpul n dalam pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^(h+1)-1 dimana h adalah tinggi dari pohon.
  • Jumlah daun n dalam sebuah pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^h dimana h adalah tinggi dari pohon.
Definisi dalam teori graf
Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari sudut tidak lebih dari 3. Ini dapat ditunjukan bahwa dalam pohon biner manapun, terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah pohon biner berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya dengan tingkat tidak lebih dari dua sebagai akar.
Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua anak; bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan antara anak kiri atau kanan. Jika kita membuang keperluan yg tak terkoneksi, membolehkan bermacam koneksi dalam komponen di gafik, kita memanggil struktur sebuah hutan.
Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada grafik langsung. Sebuah pohon biner dapat berarti:
  • Sebuah sudut tunggal.
  • Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar daris setiap pohon biner.
Ini juga tidak menentujan susunan anak, tetapi memperbaiki akar tertentu.
Kombinatorik
Kelompok dari sepasang simpul dalam sebuah pohon dapat digambarkan sebagai pasangan dari aksara dalam tanda kurung. Oleh sebab itu, (a,b) menunjukan pohon biner dimana sub pohon kirinya adalah a sedangkan sub pohon kanannya adalah b. Benang dari tanda kurung yang seimbang mungkin dapat digunakan untuk menunjukan pohon biner pada umumnya. Himpunan dari semua benang yang mungkin yang terdiri dari keseluruhan tanda kurung yang seimbang dikenal sebagal bahasa Dyck.
Diketahui n+1 simpul, jumlah seluruh jalan dimana simpul tersebut dapat disusun kedalam sebuah pohon biner dengan sebuah bilangan Catalan Description: C_n. Sebagai contoh, Description: C_2=2adalah pernyataan bahwa (ab)c dan a(bc) merupakan dua pohon biner yang mungkin, yang memiliki 3 simpul.
Kemampuan untuk menggambarkan pohon biner sebagai benang dari simbol-simbol dan tanda kurung secara tidak langsung menyatakan bahwa pohon biner dapat mewakili elemen dari magma. Sebaliknya, himpunan dari semua pohon biner yang mungkin, bersama-sama dengan operasi natural memasangkan pohon dari satu ke yang lain, dari sebuah magma, magma bebas.
Memberikan benang yang menggambarkan sebuah pohon biner, operator untuk mendapatkan sub pohon kiri dan kanan kadang-kadang mengacu sebagai CAR dan CDR.
Metode untuk menyimpan pohon biner
Pohon biner dapat dikonstruksi dari bahasa pemrograman primitif dalam berbagai cara. Dalam bahasa yang menggunakan records dan referensi, pohon biner secara khas dikonstruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa data dan referensi ke anak kiri dan anak kanan. Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. Jika sebuah simpul mempunyai kurang dari dua anak, beberapa penunjuk anak dapat diatur kedalam nilai nol khusus, atau ke sebuah simpul sentinel.
Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat. Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat ditemukan pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada indeks lantai((i-1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, tersitimewa selama sebuah preorder traversal. Bagaimanapun juga, ini terlalu mahal untuk perkembangannya dan boros tempat sebanding dengan 2h - n untuk sebuah pohon dengan tinggi h dengan nsimpul.

Sebuah pohon biner sederhana dengan lebar 9 dan tinggi 3, dengan sebuah akar yang memiliki nilai 2
Dalam ilmu komputer, sebuah pohon biner (binary tree) adalah sebuah pohon struktur data dimana setiap simpul memiliki paling banyak dua anak. Secara khusus anaknya dinamakan kiri dan kanan. Penggunaan secara umum pohon biner adalah Pohon biner terurut, yang lainnnya adalah heap biner.
  •  
Definisi untuk pohon berakar
  • Sebuah panah langsung mengacu pada penghubung dari ayah ke anak nya (panah di gambar dalam pohon).
  • Akar dari pohon adalah simpul tanpa ayah. Terdapat paling banyak satu akar dalam pohon berakar.
  • Sebuah daun adalah simpul yang tidak memiliki anak.
  • Kedalaman sebuah simpul n adalah panjang jalan dari akar ke simpul. Himpunan semua simpul pada kedalaman yang diberikan kadang-kadang dinamai dengan Tingkat (Level) dari pohon. Akar memiliki kedalaman kosong.
  • Tinggi sebuah pohon adalah panjang jalan dari akar ke daun-daunnya.
  • Saudara adalah simpul yang memiliki ayah yang sama
  • Jika terdapat sebuah jalan dari simpul p ke simpul q, dimana simpul p lebih dekat ke akar daripada q, maka p adalah leluhur dari q dan q adalah keturunan p.
  • Lebar daris sebuah simpul adalah jumlah keturunan termasuk simpul itu sendiri.
Jenis pohon biner
  • Sebuah pohon biner berakar (rooted binary tree) adalah sebuah pohon berakar dimana setiap simpul paling banyak mempunyai dua anak
  • Sebuah pohon biner penuh (full binary tree), atau pohon biner asli (proper binary tree), adalah sebuah pohon dimana setiap simpul mempunyai nol atau dua anak.
  • Sebuah pohon biner sempurna (perfect binary tree) (atau kadang-kadang pohon biner lengkap (complete binary tree) adalah sebuah pohon biner penuh dimana semua daun memiliki kedalaman yang sama.
  • Sebuah pohon biner lengkap (complete binary tree) dapat didefinisikan juga sebagai sebuah pohon biner penuh dimana semua daunnya memiliki kedalanam n atau n-1 untuk beberapa n. Agar sebuah pohon dapat menjadi sebuah pohon biner lengkap, semua anak pada tingkat terakhir harus menempati titik terkiri secara teratur, dengan tidak ada titik yang menganggur di antara keduanya. Sebagai contoh, jika dua simpul pada tingkat terbawah masing-masing menempati sebuah titik dengan suatu titik kosong di antara keduanya, tetapi sisa simpul anaknya terhimpit tanpa titik di antaranya, maka pohon tersebut tidak dapat membentuk sebuah pohon biner lengkap karena titik kosong tersebut.
  • Sebuah pohon biner lengkap berakar (rooted complete binary tree) dapat dikenali dengan magma bebas.
  • Sebuah pohon biner hampir lengkap (almost complete binary tree) adalah sebuah pohon diaman setiap simpul yang mempunyai anak kanan juga memiliki anak kiri. Memiliki anak kiri tidak memerlukan sebuah simpul untuk mempunyai anak kanan. Penjelasan lainnya, sebuah pohon biner hampir lengkap adalah sebuah pohon dimana untuk sebuah anak kanan, selalu terdapat anak kiri, tetapi untuk sebuah anak kiri, tidak selalu terdapat sebuah anak kanan.
  • Jumlah simpul n dalam pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^(h+1)-1 dimana h adalah tinggi dari pohon.
  • Jumlah daun n dalam sebuah pohon biner lengkap dapat dihitung dengan menggunakan rumus: n = 2^h dimana h adalah tinggi dari pohon.
Definisi dalam teori graf
Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari sudut tidak lebih dari 3. Ini dapat ditunjukan bahwa dalam pohon biner manapun, terdapat persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan tingkat tiga, tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah pohon biner berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya dengan tingkat tidak lebih dari dua sebagai akar.
Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua anak; bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan antara anak kiri atau kanan. Jika kita membuang keperluan yg tak terkoneksi, membolehkan bermacam koneksi dalam komponen di gafik, kita memanggil struktur sebuah hutan.
Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada grafik langsung. Sebuah pohon biner dapat berarti:
  • Sebuah sudut tunggal.
  • Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar daris setiap pohon biner.
Ini juga tidak menentujan susunan anak, tetapi memperbaiki akar tertentu.
Kombinatorik
Kelompok dari sepasang simpul dalam sebuah pohon dapat digambarkan sebagai pasangan dari aksara dalam tanda kurung. Oleh sebab itu, (a,b) menunjukan pohon biner dimana sub pohon kirinya adalah a sedangkan sub pohon kanannya adalah b. Benang dari tanda kurung yang seimbang mungkin dapat digunakan untuk menunjukan pohon biner pada umumnya. Himpunan dari semua benang yang mungkin yang terdiri dari keseluruhan tanda kurung yang seimbang dikenal sebagal bahasa Dyck.
Diketahui n+1 simpul, jumlah seluruh jalan dimana simpul tersebut dapat disusun kedalam sebuah pohon biner dengan sebuah bilangan Catalan Description: Description: C_n. Sebagai contoh, Description: Description: C_2=2adalah pernyataan bahwa (ab)c dan a(bc) merupakan dua pohon biner yang mungkin, yang memiliki 3 simpul.
Kemampuan untuk menggambarkan pohon biner sebagai benang dari simbol-simbol dan tanda kurung secara tidak langsung menyatakan bahwa pohon biner dapat mewakili elemen dari magma. Sebaliknya, himpunan dari semua pohon biner yang mungkin, bersama-sama dengan operasi natural memasangkan pohon dari satu ke yang lain, dari sebuah magma, magma bebas.
Memberikan benang yang menggambarkan sebuah pohon biner, operator untuk mendapatkan sub pohon kiri dan kanan kadang-kadang mengacu sebagai CAR dan CDR.
Metode untuk menyimpan pohon biner
Pohon biner dapat dikonstruksi dari bahasa pemrograman primitif dalam berbagai cara. Dalam bahasa yang menggunakan records dan referensi, pohon biner secara khas dikonstruksi dengan mengambil sebuah struktur simpul pohon yang memuat beberapa data dan referensi ke anak kiri dan anak kanan. Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. Jika sebuah simpul mempunyai kurang dari dua anak, beberapa penunjuk anak dapat diatur kedalam nilai nol khusus, atau ke sebuah simpul sentinel.
Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika pohon tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat. Dalam penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat ditemukan pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada indeks lantai((i-1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, tersitimewa selama sebuah preorder traversal. Bagaimanapun juga, ini terlalu mahal untuk perkembangannya dan boros tempat sebanding dengan 2h - n untuk sebuah pohon dengan tinggi h dengan nsimpul.
Dalam bahasa dengan tagged union seperti ML, sebuah simpul pohon seringkali sebuah tagged union dari dua jenis simpul, dimana yang satu merupakan data dari 3-tupel, anak kiri, dan anak kanan, dan yang lain dimana sebuah daun, yang tidak memuat data dan fungsi seperti nilai nol dalam bahasa dengan penunjuk (pointers)
Metode iterasi pohon biner
Seringkali, seseorang berkeinginan untuk mengunjungi simpul dalam pohon dan menjalankan perintahnya disana. Terdapat beberapa penyusunan umum dimana simpul-simpuk tersebut dapat dikunjungi, dan setiap simpul memiliki sifat-sifat yang berguna yang dimanfaatkan dalam algoritma yang berdasarkan pada pohon biner.
Pre-order, in-order, dan post-order traversal
Pre-order, in-order, dan post-order traversal mengunjungi setiap simpul dalam sebuah pohon dengan pengunjungan secara berulang-ulang pada sub pohon kiri dan kanan dari akarnya. Jika akarnya dikunjungi sebelum sub pohonnya, ini merupakan preoder. Jika akarnya dikunjungi sesudah sub pohonnya, ini dinamakan postorder dan jika akarnya dikunjungi di antara sub pohonnya, dinamakan inorder. In-order traversal sangat berguna dalam pohon biner terurut, dimana traversal ini mengunjungi simpul dalam urutan yang meningkat.
Depth-first order
Dalam Depth-first order, kita selalu berusaha sebisa mungkin untuk mengunjungi simpul terjauh dari akar, tetapi dengan peringatan bahwa itu haruslah sebuah simpul anak yang telah dikunjungi. Tidak seperti pencarian depth-first order dalam graf, tidak diperlukan untuk mengingat seluruh simpul yang telah dikunjungi, karena sebuah pohon tidak dapat memuat siklus. Pre-order merupakan kasus khusus untuk ini.
Breadth-first order
Dibandingkan dengan depth-first order, breadth-first order, yang selalu berusaha untuk mengnjungi simpul terdekat dengan akar yang belum dikunjunginya.


Dalam bahasa dengan tagged union seperti ML, sebuah simpul pohon seringkali sebuah tagged union dari dua jenis simpul, dimana yang satu merupakan data dari 3-tupel, anak kiri, dan anak kanan, dan yang lain dimana sebuah daun, yang tidak memuat data dan fungsi seperti nilai nol dalam bahasa dengan penunjuk (pointers)
Metode iterasi pohon biner
Seringkali, seseorang berkeinginan untuk mengunjungi simpul dalam pohon dan menjalankan perintahnya disana. Terdapat beberapa penyusunan umum dimana simpul-simpuk tersebut dapat dikunjungi, dan setiap simpul memiliki sifat-sifat yang berguna yang dimanfaatkan dalam algoritma yang berdasarkan pada pohon biner.
Pre-order, in-order, dan post-order traversal
Pre-order, in-order, dan post-order traversal mengunjungi setiap simpul dalam sebuah pohon dengan pengunjungan secara berulang-ulang pada sub pohon kiri dan kanan dari akarnya. Jika akarnya dikunjungi sebelum sub pohonnya, ini merupakan preoder. Jika akarnya dikunjungi sesudah sub pohonnya, ini dinamakan postorder dan jika akarnya dikunjungi di antara sub pohonnya, dinamakan inorder. In-order traversal sangat berguna dalam pohon biner terurut, dimana traversal ini mengunjungi simpul dalam urutan yang meningkat.
Depth-first order
Dalam Depth-first order, kita selalu berusaha sebisa mungkin untuk mengunjungi simpul terjauh dari akar, tetapi dengan peringatan bahwa itu haruslah sebuah simpul anak yang telah dikunjungi. Tidak seperti pencarian depth-first order dalam graf, tidak diperlukan untuk mengingat seluruh simpul yang telah dikunjungi, karena sebuah pohon tidak dapat memuat siklus. Pre-order merupakan kasus khusus untuk ini.
Breadth-first order
Dibandingkan dengan depth-first order, breadth-first order, yang selalu berusaha untuk mengnjungi simpul terdekat dengan akar yang belum dikunjunginya.
#include "iostream.h"
#include  "string.h"
#include "conio.h"

struct simpulpohon
{
  simpulpohon *induk;
  simpulpohon *kiri;
  simpulpohon *kanan;
  char data;
};

class pohonbiner
{
  private:
  simpulpohon *akar;

  int tambah(simpulpohon *orangtua, simpulpohon *baru);
  void tampil(simpulpohon *simpul);

  public:
  pohonbiner();
  int tambah(char data);
  void tampil();

};

void main()
{
  clrscr();
  char data[] = "CARKDUPBENXZS";

  pohonbiner pohon;

  for (int i = 0; i < strlen(data); i++)
  pohon.tambah(data[i]);

  cout<<"Data ke Pohon Biner : "<<endl;
  for (int x = 0; x < strlen(data); x++)
   cout<<data[x];

  cout<<endl;
  cout<<endl;
  cout<<"Hasil Pohon Biner :"<<endl;
  pohon.tampil();
  getch();
}

pohonbiner::pohonbiner()
{
  akar = NULL;
}

int pohonbiner::tambah(char data)
{
  simpulpohon *simpul;

  simpul= new simpulpohon;

  simpul->kiri = NULL;
  simpul->kanan = NULL;
  simpul->induk = NULL;
  simpul->data = data;

  if (akar == NULL)
  {
    akar = simpul;
    return(1);
  }
  else
     return(tambah(akar,simpul));
}

int pohonbiner::tambah(simpulpohon *orangtua, simpulpohon *baru)
{
  if (baru->data ==orangtua->data)
   {
    delete baru;
    return(0);
   }

  else if (baru->data < orangtua->data)
   {
    if (!orangtua->kiri)
     {
      orangtua->kiri = baru;
      baru->induk = orangtua;
     }
    else
      return(tambah(orangtua->kiri,baru));
   }

  else
   {
     if (!orangtua->kanan)
     {
       orangtua->kanan = baru;
       baru->induk = orangtua;
     }
     else
       return(tambah(orangtua->kanan,baru));
    }
  return(1);
}


void pohonbiner::tampil()
{
  tampil(akar);
  cout<<endl;
}

void pohonbiner::tampil(simpulpohon *simpul)
{
  if (simpul)
  {
     if (simpul->kiri) tampil(simpul->kiri);

     cout<<simpul->data;

     if (simpul->kanan) tampil(simpul->kanan);
  }
}