Diktat_Prosedural_12_Pohon

Jika cc adalah dan karakter sebelumnya adalah maka

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: a CC adalah abjad dan karakter sebelumnya adalah ‘(‘, maka node siap diinsert sebagai anak kiri). • Jika CC adalah ‘(‘, maka harus siap melakukan insert sebuah node dan berikutnya adalah melakukan insert sebagai sub pohon kiri. • Jika CC adalah ‘)’ dan karakter sebelumnya adalah ‘(‘ maka tidak ada yang perlu diinsert pada level tersebut. /* /* /* /* */ Nama file : mtree.h */ Dibuat oleh Riza Satria Perdana */ Deskripsi : Header primitif Tree */ Representasi pohon : pohon biner dengan tambahan informasi pointer ke Parent #ifndef _MTREE #define _MTREE typedef char Infotype; #define Nil NULL; /*** Selektor ****/ #define Info(P) (P)->Info; #define Left(P) (P)->Left; #define Right(P) (P)->Right; #define Parent(P) (P)->Parent; typedef struct tElmtTree *address; typedef struct tElmtTree { InfoType info; address Left; address Right; address Parentt; } ElmtTree; typedef address Tree; Oleh: Inggriani Liem/Revisi bab oleh: Tim IF2030 sem. 1 2011-2012/Tgl. Revisi: 21 Nov 2011 15 Draft Diktat Struktur Data Hanya untuk digunakan di lingkungan Sekolah Teknik Elektro dan Informatika ITB void Alokasi (address*P, InfoType X); /* I.S. sembarang */ /* F.S. address P dialokasi, dan bernilai tidak Nil jika berhasil */ /* Alokasi sebuah address P */ void MakeTree(Tree *T); void PrintTree (Tree T); #endif /* Nama file : mtree.c */ /* Dibuat oleh Riza Satria Perdana */ /* Deskripsi : membentuk sebuah pohon dari pita karakter */ #include #include #include #include <stdlib.h> "boolean.h" "tree.h" "mesinkar.h" void Alokasi (address *P,InfoType X) { *P =(adress) malloc(sizeof(ElmtTree)); if (*P !=Nil) { Info(*P)=X; Parent(*P)=Nil; Left(*P)=Nil; Right(*P)=Nil; } } void MakeTree (Tree *T) { /* Kamus */ address CurrParent; address Ptr; int level; boolean Inski; /* Algoritma */ START_COUPLE; Alokasi (T,CC); CurrParent = *T; ADV_COUPLE; while (!EOP) { switch (CC) { case '(' : level++; InsKi= C1 !='('; break; case ')' : level--; if( C1 !='(') { CurrParent=Parent (CurrParent); } break; default : Alokasi (Ptr,CC); if(InsKi) { Left(CurrParent)= Ptr; } else { Right(CurrParent)= Ptr; } Parent(Ptr)=CurrParent; break; } ADV_COUPLE; } Oleh: Inggriani Liem/Revisi bab oleh: Tim IF2030 sem. 1 2011-2012/Tgl. Revisi: 21 Nov 2011 16 Draft Diktat Struktur Data Hanya untuk digunakan di lingkungan Sekolah Teknik Elektro dan Informatika ITB } int main () { /* Kamus */ Tree T; /* Algoritma */ MakeTree(&T); PrintTree (T); return 0; } Pembangunan Pohon Biner secara Rekursif /* File : tree.h */ /* dibuat oleh Riza Satria Perdana */ #ifndef __TREE_H__ #define __TREE_H__ #include <stdlib.h> #define Nil NULL #define Info(T) (T)->info #define Left(T) (T)->left #define Right(T) (T)->right typedef char infotype; typedef struct TNode *address; typedef struct TNode { infotype info; address left; address right; } Node; typedef address Tree; void Allocate(address *P); void BuildTree(Tree *T); void BuildTreeFromString(Tree *T, char *st, int *idx); void PrintTree(Tree T); #endif /* file : tree.c */ #include "tree.h" #include "mesinkar.h" void Allocate(address *P) { *P=(address) malloc(sizeof(Node)); } void BuildTree(Tree *T) /* dipakai jika input dari pita karakter */ { ADV(); if (CC==')') (*T)=Nil; else { Allocate(T); Info(*T)=CC; ADV(); BuildTree(&Left(*T)); Oleh: Inggriani Liem/Revisi bab oleh: Tim IF2030 sem. 1 2011-2012/Tgl. Revisi: 21 Nov 2011 17 Draft Diktat Struktur Data Hanya untuk digunakan di lingkungan Sekolah Teknik Elektro dan Informatika ITB BuildTree(&Right(*T)); } ADV(); } void BuildTreeFromString(Tree *T, char *st, int *idx) /* input dari string st */ { (*idx)++; /* advance */ if (st[*idx]==')') (*T)=Nil; else { Allocate(T); Info(*T)=st[*idx]; (*idx)++; /* advance */ BuildTreeFromString(&Left(*T),st,idx); BuildTreeFromString(&Right(*T),st,idx); } (*idx)++; /* advance */ } void PrintTree(Tree T) { if (T==Nil) printf("()"); else { printf("(%c",Info(T)); PrintTree(Left(T)); PrintTree(Right(T)); printf(")"); } } int main() { Tree T; int idx=0; /* test dari Pita */ START(); PrintTree(T); /* Test dari string yang diberikan sebagai ekspresi */ BuildTreeFromString(&T,"(A(B()())(C()()))",&idx); PrintTree(T); return 0; } Oleh: Inggriani Liem/Revisi bab oleh: Tim IF2030 sem. 1 2011-2012/Tgl. Revisi: 21 Nov 2011 18...
View Full Document

Ask a homework question - tutors are online