SlideShare a Scribd company logo
Pohon Biner 
Algoritma dan 
Struktur Data 
Kuliahkita - Edwin Lunando
Pohon Biner 
Binary Tree adalah struktur data 
yang maksimal memiliki 2 cabang 
(kiri | kanan) 
Meski tidak seimbang, asalkan 
maksimal cabang pada tree adalah 2, 
tetap dikatakan pohon biner.
Sifat Pohon Biner 
Binary mungkin kosong atau terdiri dari sebuah akar dan 
dua anak dengan lebar maksimal 2 pada tiap levelnya, 
akan tetapi tidak memiliki batas kedalaman. 
Apabila sebuah pohon memiliki sub-tree pada salah satu 
sisi yang lebih banyak maka pohon tersebut disebut pohon 
condong - kiri atau kanan (skewed tree)
Contoh Struktur Pohon Biner 
left item right 
left item right left item right 
left item right left item right left item 
item 
Root 
Node 
Leaf / 
Node tanpa cabang
Contoh Penggunaan 
Pohon ekspresi matematika: (3 + 4 x 5) 
+ 
3 x 
4 5
TDA Pohon Biner 
{ Deklarasi Type } 
type node < info : infotype, 
left : address, 
right : address > 
type BinTree : address 
type Elmtnode < info : infotype, 
Next : address> 
type ListofNode : address { list linier yang elemennya Elmtnode }
Penjelasan TDA Pohon Biner 
Pohon biner memiliki konsep yang mirip dengan senarai 
atau list. 
Perbedaannya, pada list hanya dihubungkan tepat satu 
buah simpul sedangkan pohon biner menghubungkan dua 
buah simpul yaitu left dan right. 
Jika pohon biasa, maka simpul yang dihubungkan dapat 
berjumlah lebih dari dua.
Penjelasan TDA Pohon Biner - 2 
Simpul pada pohon biner terdapat info yang menyimpan 
informasi dengan tipe tertentu seperti list. 
Selain itu juga terdapat right dan left, yang menyimpan 
alamat dari simpul berikutnya. Dengan begitu sebuah 
simpul dapat terhubung dengan simpul. 
Terdapat juga sebuah parent yang menunjuk alamat dari 
induk simpulnya. Dengan parent, simpul dapat menelusuri 
ke dua arah yaitu ke anaknya dan induknya.
TDA Pohon Biner - Primitif 
{ Inisialisasi } 
procedure MakeTree (input Akar:infotype, input/output P: BinTree, L: 
BinTree, R:BinTree) 
{ I.S. sembarang } 
{ F.S. Menghasilkan sebuah pohon P } 
{Menghasilkan sebuah pohon biner P dari A, L dan R , jika alokasi 
berhasil} 
{Menghasilkan pohon P yang kosong (Nil) jika alokasi gagal } 
{ PRIMITIF } 
{ Selektor } 
function GetAkar (P: BinTree) → infotype 
{ Mengirimkan nilai Akar pohon biner P } 
function GetLeft (P: BinTree) → BinTree 
{ Mengirimkan Anak Kiri pohon biner P } 
function GetRight (P: BinTree) → BinTree 
{ Mengirimkan Anak Kanan pohon biner P }
TDA Pohon Biner - Operasi 
{ Search } 
function Pencarian (P: BinTree,X:infotype) → boolean 
{ Mengirimkan true jika ada node dari P yang bernilai X } 
{ fungsi lain }
Contoh Kode C++ 
#include <iostream> 
using namespace std; 
typedef char Infotype; // Infotype didefinisikan sebagai alias dari tipe karakter 
typedef struct tElmtTree *address; 
typedef struct tElmtTree { 
Infotype Info; // Info adalah informasi dari sebuah simpul pohon bertipe Infotype yang 
terdefinisi 
address Left; // Cabang kiri dari sebuah pohon bertipe alamat menuju ke sebuah simpul kiri 
address Right; // Cabang kanan juga memilikit tipe alamat menuju sebuah simpul 
address Parent; // Parent adalah alamat dari sebuah simpul yang posisinya di atas dirinya 
} ElmtTree; // Semua ini dibungkus dalam sebuah tipe dan merupakan definisi dari simpul 
#define Info(P) (P)->Info 
#define Left(P) (P)->Left 
#define Right(P) (P)->Right 
#define Parent(P) (P)->Parent
Contoh Kode C++ - Lanjutan 
... 
/* Pembuatan simpul baru */ 
ElmtTree buatSimpul(Infotype x) { 
ElmtTree elem; // definisikan ElmtList sebagai simpul 
elem.Info = x; // isi informasi pada simpul 
elem.Left = NULL; // alamat left dan right baru adalah kosong atau NULL 
elem.Right = NULL; // alamat next dari simpul yang baru adalah kosong atau NULL 
elem.Parent = NULL; // alamat next dari simpul yang baru adalah kosong atau NULL 
return elem; 
} 
...
Contoh Kode C++ - Lanjutan 
… 
/* Pembuatan dan inisialisasi pohon baru */ 
void MakeTree (Infotype akar, Tree *P, Tree L, Tree R) { 
*P = (address) malloc(sizeof(ElmtTree)); // definisikan pohon 
if (*P != NULL) { // jika berhasil, inisialisasikan 
Info(*P) = akar; // masukkan nilai dari akar 
Parent(*P) = NULL; // Pohon baru tidak memiliki induk karena dia adalah akar 
Left(*P) = L; // Jika terdapat upa-pohon sebagai anak di sisi kiri 
Right(*P) = R; // Jika terdapat upa-pohon sebagai anak di sisi kanan 
} 
} 
…
Contoh Kode C++ - Lanjutan 
… 
int main(){ 
ElmtTree akar = buatSimpul('X'); 
ElmtTree node1 = buatSimpul('A'); 
ElmtTree node2 = buatSimpul('B'); 
Tree T1,T2,T3; 
// Inisialisasi instan 
T2 = &node2; // menghasilkan null pada anak kiri dan kanan 
T3 = &node3; 
// Inisialisasi Lengkapnya dengan 
MakeTree('A', &T2, NULL, NULL); 
MakeTree('B', &T2, NULL, NULL); 
MakeTree('Z', &T1, T2, T3); 
cout << T1->Left->Info; 
return 0; 
}
Contoh Pencarian Pohon Biner 
Terdapat tree sebagai 
seperti pada gambar di 
samping. 
Kita akan mencari nilai 
apakah terdapat nilai 8 pada 
pohon. 
13 
8 18 
3 10 
9 11 
30
Contoh Pencarian Pohon Biner 
1. Lihat elemen pertama (13), apakah 9. 
Karena elemen pertama > 9, maka kita ke 
kiri. 
2. Lihat elemen ke-2 yang dibandingkan (8). 
Karena elemen kedua bukan 9 dan < 9, 
maka ke kanan. 
3. Lihat Elemen ke-3 yang dibandingkan 
(10). Karena elemen ketiga bukan 9 dan > 
9, maka ke kiri 
4. Lihat Elemen ke-4 (9). Karena tidak ada 
childnya, akan langsung mengembalikan 
false jika tidak ditemukan. Karena 9 = 9, 
maka kembalikan true 
13 
8 18 
3 10 
9 11 
30
Pencarian Pohon Biner 
Pencarian terhadap binary tree dilakukan secara rekursif. 
Berikut adalah pseudocodenya. 
function pencarianBinaryTree(key, node) 
/* Jika elemen pada node atau key = nilai yang dicari -> sebagai basis */ 
if node = Null or node.key = key then 
return node 
else if key < node.key then 
return pencarianBinaryTree(key, node.left) 
else 
return pencarianBinaryTree(key, node.right) 
end if
Pencarian Pohon Biner 
Berikut contoh implementasi sederhana dalam fungsi C++ 
node search(int key, node *leaf) { 
if(leaf != NULL) { 
if(key == leaf->Info) 
return leaf; 
if(key < leaf->Info) 
return search(key, leaf->Left); 
else 
return search(key, leaf->Right); 
} 
else return NULL; 
}

More Related Content

PPT
Materi Struktur Data Tree
PDF
Algoritma dan Struktur Data - Bubble Sort
PDF
Graph-Struktur Data.pdf
PPTX
Database Entity Relationship Diagram (ERD)
PPTX
PDF
5. Doubly Linked List (Struktur Data)
PPT
1. pengenalan python
PPTX
Topologi jaringan ppt
Materi Struktur Data Tree
Algoritma dan Struktur Data - Bubble Sort
Graph-Struktur Data.pdf
Database Entity Relationship Diagram (ERD)
5. Doubly Linked List (Struktur Data)
1. pengenalan python
Topologi jaringan ppt

What's hot (20)

DOCX
MAKALAH STACK (TUMPUKAN )
DOCX
Simbol Komponen Elektronika
PPTX
CFG dan PARSING - P 5 - Teknik Kompilasi
PPTX
Nonreturn to zero level (nrz-l)
PPTX
Pemodelan database
PPTX
PPT Interaktif Hukum Mendel
DOCX
Materi Basis Data - Anomali dan Normalisasi
PDF
Matematika Diskrit - 11 kompleksitas algoritma - 03
PPT
Penyederhanaan Karnaugh Map
PDF
5 transformasi model data
PPTX
Jenis dan proses interupsi
PDF
Kisi kisi soal uas semester 2 BSI
PPTX
Deadlock pada sistem operasi
DOCX
Contoh kalimat fakta dan opini
DOCX
Transkripsi eukariot-prokariot
PDF
LAPORAN PRAKTIKUM DASAR-DASAR GENETIKA DAN PEMULIAAN TANAMAN PERSILANGAN MONO...
PPTX
SLIDE KE:5 NFA
DOCX
ALEL GANDA DAN GEN GANDA
DOCX
Pendahuluan, pembahasan, penutup dan daftar pustaka Makalah Algoritma dan Pem...
MAKALAH STACK (TUMPUKAN )
Simbol Komponen Elektronika
CFG dan PARSING - P 5 - Teknik Kompilasi
Nonreturn to zero level (nrz-l)
Pemodelan database
PPT Interaktif Hukum Mendel
Materi Basis Data - Anomali dan Normalisasi
Matematika Diskrit - 11 kompleksitas algoritma - 03
Penyederhanaan Karnaugh Map
5 transformasi model data
Jenis dan proses interupsi
Kisi kisi soal uas semester 2 BSI
Deadlock pada sistem operasi
Contoh kalimat fakta dan opini
Transkripsi eukariot-prokariot
LAPORAN PRAKTIKUM DASAR-DASAR GENETIKA DAN PEMULIAAN TANAMAN PERSILANGAN MONO...
SLIDE KE:5 NFA
ALEL GANDA DAN GEN GANDA
Pendahuluan, pembahasan, penutup dan daftar pustaka Makalah Algoritma dan Pem...
Ad

Similar to Algoritma dan Struktur Data - pohon biner (20)

PDF
Algoritma dan Struktur Data - Pohon Biner
PDF
Bab x tree (pohon)
PPTX
power point struktur data tree atau pohon
PPT
Tistrukdat10
PPTX
PPTX
Asd sesi tree part1
DOCX
Makalah Kunjungan Binary Tree
PPT
Struktur Data Tree
PDF
Laporan Resmi BAB 1 (Tree)
DOCX
Algorithms and Data Structures
PPT
Struktur affif
DOC
Queue dan tree
PPT
Bab 9 tree
PDF
Pertemuan 9 revisijan2013-mhs
PDF
Buku struktur data pages-111-122
PDF
Laporan resmi bab 1 (tree bag.2)
PPTX
Sd bab 12 (tree)
PPT
Struktur data 04 (binary tree)
Algoritma dan Struktur Data - Pohon Biner
Bab x tree (pohon)
power point struktur data tree atau pohon
Tistrukdat10
Asd sesi tree part1
Makalah Kunjungan Binary Tree
Struktur Data Tree
Laporan Resmi BAB 1 (Tree)
Algorithms and Data Structures
Struktur affif
Queue dan tree
Bab 9 tree
Pertemuan 9 revisijan2013-mhs
Buku struktur data pages-111-122
Laporan resmi bab 1 (tree bag.2)
Sd bab 12 (tree)
Struktur data 04 (binary tree)
Ad

More from Georgius Rinaldo (20)

PDF
Algoritma dan Struktur Data - methods
PDF
Algoritma dan Struktur Data - Struktur Data
PDF
Algoritma dan Struktur Data - constructor dan destructor
PDF
Algoritma dan Struktur Data - object
PDF
Algoritma dan Struktur Data - adt
PDF
Algoritma dan Struktur Data - pengenalan pohon
PDF
Algoritma dan Struktur Data - antrian
PDF
Algoritma dan Struktur Data - tumpukan
PDF
Algoritma dan Struktur Data - pengurutan insertion
PDF
Algoritma dan Struktur Data - pengurutan selection
PDF
Algoritma dna Struktur Data - Pengurutan Merge
PDF
Algoritma dan Struktur Data - pengurutan bubble
PDF
Algoritma dan Struktur Data - pencarian biner
PDF
Algoritma dan Strukutr Data - rekursi
PDF
Algoritma dan Struktur Data - set
PDF
Algoritma dan Struktur Data - list
PDF
Algoritma dan Struktur Data - Larik
PDF
Algoritma dan Struktur Data - operasi file
PDF
Algoritma dan Struktur Data - tipe data compound
PDF
Algoritma dan Struktur Data - fungsi dan prosedur c++
Algoritma dan Struktur Data - methods
Algoritma dan Struktur Data - Struktur Data
Algoritma dan Struktur Data - constructor dan destructor
Algoritma dan Struktur Data - object
Algoritma dan Struktur Data - adt
Algoritma dan Struktur Data - pengenalan pohon
Algoritma dan Struktur Data - antrian
Algoritma dan Struktur Data - tumpukan
Algoritma dan Struktur Data - pengurutan insertion
Algoritma dan Struktur Data - pengurutan selection
Algoritma dna Struktur Data - Pengurutan Merge
Algoritma dan Struktur Data - pengurutan bubble
Algoritma dan Struktur Data - pencarian biner
Algoritma dan Strukutr Data - rekursi
Algoritma dan Struktur Data - set
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - Larik
Algoritma dan Struktur Data - operasi file
Algoritma dan Struktur Data - tipe data compound
Algoritma dan Struktur Data - fungsi dan prosedur c++

Recently uploaded (20)

PPTX
02 SEL ELEKTROKIMIA 1.pptx kimia fisika 1
PPTX
Resistensi Perubahan Teknik Sipil Manajemen Konstruksi
PPT
electronic fuel injection for automotive sectors
PPTX
585590334-INTAKE-AND-EXHAUST-SYSTEM-Ahmad-Aditya-S-W.pptx
PPT
Penanganan motor starter pada dunia otomotif
PDF
MAINKAN GAME KESUKAN KALIAN DI TANGKI 4D DI JAMIN WD DAN CLIAM BONUSNYA
PPT
variabel valve timing intelligence untuk xenia
PPTX
4. PENERAPAN PENGELOLAAN SUMBER DAYA MANUSIA.pptx
PPT
PCM pekerjaan pembangunan Jembatan payahe
PPTX
4. Penyusunan Rancangan Kontrak _edit 2024-Parwanta1.pptx
PPTX
1 Peraturan Perundangan terkait Keselamatan Konstruksi 18.10 - Copy.pptx
PPTX
presentasi pekerjaan pembangunan jaringan irigasi
PPTX
Pengarusutamaan GESI Dalam Penataan Perumahan dan Permukiman.pptx
PPTX
7-presentasi-pk-metrologi-141030010022-conversion-gate01.pptx
PPTX
PEMBUATAN PANEL TRAINER DAN PROTOTYPE UNTUK PENINGKATAN KOMPETENSI TENTANG S...
PPTX
MAINTENACE KNOWLEDGE_SHARING_ALL NEW.pptx
PDF
chapter 1 Smith and Van ness thermodynamics
PDF
12. Mekanisme Pelaporan Kegiatan Sanimas_rev08082024.pptx.pdf
PPTX
Pengenalan SPALDT_SPALDS_Karanganyar.pptx
PPT
hand-tools-service-special-tools-alat-ukur.ppt
02 SEL ELEKTROKIMIA 1.pptx kimia fisika 1
Resistensi Perubahan Teknik Sipil Manajemen Konstruksi
electronic fuel injection for automotive sectors
585590334-INTAKE-AND-EXHAUST-SYSTEM-Ahmad-Aditya-S-W.pptx
Penanganan motor starter pada dunia otomotif
MAINKAN GAME KESUKAN KALIAN DI TANGKI 4D DI JAMIN WD DAN CLIAM BONUSNYA
variabel valve timing intelligence untuk xenia
4. PENERAPAN PENGELOLAAN SUMBER DAYA MANUSIA.pptx
PCM pekerjaan pembangunan Jembatan payahe
4. Penyusunan Rancangan Kontrak _edit 2024-Parwanta1.pptx
1 Peraturan Perundangan terkait Keselamatan Konstruksi 18.10 - Copy.pptx
presentasi pekerjaan pembangunan jaringan irigasi
Pengarusutamaan GESI Dalam Penataan Perumahan dan Permukiman.pptx
7-presentasi-pk-metrologi-141030010022-conversion-gate01.pptx
PEMBUATAN PANEL TRAINER DAN PROTOTYPE UNTUK PENINGKATAN KOMPETENSI TENTANG S...
MAINTENACE KNOWLEDGE_SHARING_ALL NEW.pptx
chapter 1 Smith and Van ness thermodynamics
12. Mekanisme Pelaporan Kegiatan Sanimas_rev08082024.pptx.pdf
Pengenalan SPALDT_SPALDS_Karanganyar.pptx
hand-tools-service-special-tools-alat-ukur.ppt

Algoritma dan Struktur Data - pohon biner

  • 1. Pohon Biner Algoritma dan Struktur Data Kuliahkita - Edwin Lunando
  • 2. Pohon Biner Binary Tree adalah struktur data yang maksimal memiliki 2 cabang (kiri | kanan) Meski tidak seimbang, asalkan maksimal cabang pada tree adalah 2, tetap dikatakan pohon biner.
  • 3. Sifat Pohon Biner Binary mungkin kosong atau terdiri dari sebuah akar dan dua anak dengan lebar maksimal 2 pada tiap levelnya, akan tetapi tidak memiliki batas kedalaman. Apabila sebuah pohon memiliki sub-tree pada salah satu sisi yang lebih banyak maka pohon tersebut disebut pohon condong - kiri atau kanan (skewed tree)
  • 4. Contoh Struktur Pohon Biner left item right left item right left item right left item right left item right left item item Root Node Leaf / Node tanpa cabang
  • 5. Contoh Penggunaan Pohon ekspresi matematika: (3 + 4 x 5) + 3 x 4 5
  • 6. TDA Pohon Biner { Deklarasi Type } type node < info : infotype, left : address, right : address > type BinTree : address type Elmtnode < info : infotype, Next : address> type ListofNode : address { list linier yang elemennya Elmtnode }
  • 7. Penjelasan TDA Pohon Biner Pohon biner memiliki konsep yang mirip dengan senarai atau list. Perbedaannya, pada list hanya dihubungkan tepat satu buah simpul sedangkan pohon biner menghubungkan dua buah simpul yaitu left dan right. Jika pohon biasa, maka simpul yang dihubungkan dapat berjumlah lebih dari dua.
  • 8. Penjelasan TDA Pohon Biner - 2 Simpul pada pohon biner terdapat info yang menyimpan informasi dengan tipe tertentu seperti list. Selain itu juga terdapat right dan left, yang menyimpan alamat dari simpul berikutnya. Dengan begitu sebuah simpul dapat terhubung dengan simpul. Terdapat juga sebuah parent yang menunjuk alamat dari induk simpulnya. Dengan parent, simpul dapat menelusuri ke dua arah yaitu ke anaknya dan induknya.
  • 9. TDA Pohon Biner - Primitif { Inisialisasi } procedure MakeTree (input Akar:infotype, input/output P: BinTree, L: BinTree, R:BinTree) { I.S. sembarang } { F.S. Menghasilkan sebuah pohon P } {Menghasilkan sebuah pohon biner P dari A, L dan R , jika alokasi berhasil} {Menghasilkan pohon P yang kosong (Nil) jika alokasi gagal } { PRIMITIF } { Selektor } function GetAkar (P: BinTree) → infotype { Mengirimkan nilai Akar pohon biner P } function GetLeft (P: BinTree) → BinTree { Mengirimkan Anak Kiri pohon biner P } function GetRight (P: BinTree) → BinTree { Mengirimkan Anak Kanan pohon biner P }
  • 10. TDA Pohon Biner - Operasi { Search } function Pencarian (P: BinTree,X:infotype) → boolean { Mengirimkan true jika ada node dari P yang bernilai X } { fungsi lain }
  • 11. Contoh Kode C++ #include <iostream> using namespace std; typedef char Infotype; // Infotype didefinisikan sebagai alias dari tipe karakter typedef struct tElmtTree *address; typedef struct tElmtTree { Infotype Info; // Info adalah informasi dari sebuah simpul pohon bertipe Infotype yang terdefinisi address Left; // Cabang kiri dari sebuah pohon bertipe alamat menuju ke sebuah simpul kiri address Right; // Cabang kanan juga memilikit tipe alamat menuju sebuah simpul address Parent; // Parent adalah alamat dari sebuah simpul yang posisinya di atas dirinya } ElmtTree; // Semua ini dibungkus dalam sebuah tipe dan merupakan definisi dari simpul #define Info(P) (P)->Info #define Left(P) (P)->Left #define Right(P) (P)->Right #define Parent(P) (P)->Parent
  • 12. Contoh Kode C++ - Lanjutan ... /* Pembuatan simpul baru */ ElmtTree buatSimpul(Infotype x) { ElmtTree elem; // definisikan ElmtList sebagai simpul elem.Info = x; // isi informasi pada simpul elem.Left = NULL; // alamat left dan right baru adalah kosong atau NULL elem.Right = NULL; // alamat next dari simpul yang baru adalah kosong atau NULL elem.Parent = NULL; // alamat next dari simpul yang baru adalah kosong atau NULL return elem; } ...
  • 13. Contoh Kode C++ - Lanjutan … /* Pembuatan dan inisialisasi pohon baru */ void MakeTree (Infotype akar, Tree *P, Tree L, Tree R) { *P = (address) malloc(sizeof(ElmtTree)); // definisikan pohon if (*P != NULL) { // jika berhasil, inisialisasikan Info(*P) = akar; // masukkan nilai dari akar Parent(*P) = NULL; // Pohon baru tidak memiliki induk karena dia adalah akar Left(*P) = L; // Jika terdapat upa-pohon sebagai anak di sisi kiri Right(*P) = R; // Jika terdapat upa-pohon sebagai anak di sisi kanan } } …
  • 14. Contoh Kode C++ - Lanjutan … int main(){ ElmtTree akar = buatSimpul('X'); ElmtTree node1 = buatSimpul('A'); ElmtTree node2 = buatSimpul('B'); Tree T1,T2,T3; // Inisialisasi instan T2 = &node2; // menghasilkan null pada anak kiri dan kanan T3 = &node3; // Inisialisasi Lengkapnya dengan MakeTree('A', &T2, NULL, NULL); MakeTree('B', &T2, NULL, NULL); MakeTree('Z', &T1, T2, T3); cout << T1->Left->Info; return 0; }
  • 15. Contoh Pencarian Pohon Biner Terdapat tree sebagai seperti pada gambar di samping. Kita akan mencari nilai apakah terdapat nilai 8 pada pohon. 13 8 18 3 10 9 11 30
  • 16. Contoh Pencarian Pohon Biner 1. Lihat elemen pertama (13), apakah 9. Karena elemen pertama > 9, maka kita ke kiri. 2. Lihat elemen ke-2 yang dibandingkan (8). Karena elemen kedua bukan 9 dan < 9, maka ke kanan. 3. Lihat Elemen ke-3 yang dibandingkan (10). Karena elemen ketiga bukan 9 dan > 9, maka ke kiri 4. Lihat Elemen ke-4 (9). Karena tidak ada childnya, akan langsung mengembalikan false jika tidak ditemukan. Karena 9 = 9, maka kembalikan true 13 8 18 3 10 9 11 30
  • 17. Pencarian Pohon Biner Pencarian terhadap binary tree dilakukan secara rekursif. Berikut adalah pseudocodenya. function pencarianBinaryTree(key, node) /* Jika elemen pada node atau key = nilai yang dicari -> sebagai basis */ if node = Null or node.key = key then return node else if key < node.key then return pencarianBinaryTree(key, node.left) else return pencarianBinaryTree(key, node.right) end if
  • 18. Pencarian Pohon Biner Berikut contoh implementasi sederhana dalam fungsi C++ node search(int key, node *leaf) { if(leaf != NULL) { if(key == leaf->Info) return leaf; if(key < leaf->Info) return search(key, leaf->Left); else return search(key, leaf->Right); } else return NULL; }