You are on page 1of 4

รหัสนศ. 116630462036-0 ชื่อ สกุล นายณัฐชัย ยิม้ ฉาย กลุม่ 1 .

ใบงานที่ 7
Tree
วัตถุประสงค์ ศึกษาและเพิ่มทักษะ การจาลองการทางานของต้นไม้ ดังนี ้
การทดลองที1่ ให้ทดลองเขียนโปรแกรมโดยมีโครงสร้างของโหนดด้านล่างนี ้ และทาความเข้าใจตามทฤษฎี
typedef struct Node {int Info;
struct Node *Left;
struct Node *Right;
struct Node *Mother;
}TYPE_NODE;
typedef struct Node *TYPE_NODEPTR;
1. เขียนเมนูสาหรับโปรแกรมจาลองต้นไม้ โดยมีเมนูดงั นี ้
1. Create Root Node 6. Go to Mother Node
2. Insert Left Node 7. Display Current Node
3. Insert Right Node 8. Pre-Order Traversal
4. Go to Left 9. In-Order Traversal
5. Go to Right 10. Post-Order Traversal
2. เขียนฟั งก์ชนั สร้าง Tree แล้วกาหนดให้ Pointer T ชีท้ ่ี Root Node เสมอ และทดสอบรันโปรแกรม
3. สร้างฟั งก์ช่นั DisplayC เพื่อแสดงข้อมูลของโหนดปั จจุบนั ที่พอยน์เตอร์ชีอ้ ยู่ในต้นไม้
TYPE_NODEPTR MakeT(TYPE_NODEPTR T,int Data) void DisplayC(TYPE_NODEPTR P)
{ {
T = (TYPE_NODEPTR) malloc(sizeof(TYPE_NODE)); printf("Node Data = %d\n" ,P->Info);
T->Info = Data; }
T->Left = NULL;
T->Right = NULL;
T->Mother = NULL;
return T;
}
รหัสนศ. 116630462036-0 ชื่อ สกุล นายณัฐชัย ยิม้ ฉาย กลุม่ 1 .

การทดลองที่ 2 สร้างฟังก์ช่นั InsertLeft และ InsertRight


1. เขียนฟั งก์ชนั InsertLeft เพื่อเพิ่มโหนดลูกทางซ้ายของโหนดที่ พอยน์เตอร์ (P) ชีอ้ ยู่ปัจจุบนั และทดสอบรันโปรแกรม
2. เขียนฟั งก์ชนั InsertRightเพื่อเพิ่มโหนดลูกทางขวาของโหนดที่ พอยน์เตอร์ (p) ชีอ้ ยู่ปัจจุบนั และทดสอบรันโปรแกรม

TYPE_NODEPTR InsertLeft(TYPE_NODEPTR P,int Data) TYPE_NODEPTR InsertRight(TYPE_NODEPTR P,int Data)


{ {
TYPE_NODEPTR Q; TYPE_NODEPTR Q;
Q = MakeT(Q,Data); Q = MakeT(Q,Data);
Q->Mother = P; Q->Mother = P;
P->Left = Q; P->Right = Q;
}
}
รหัสนศ. 116630462036-0 ชื่อ สกุล นายณัฐชัย ยิม้ ฉาย กลุม่ 1 .

การทดลองที่ 3 สร้างฟั งก์ชนั ในการท่องเข้าไปในต้นไม้ 3 รูปแบบ


1. PreOrder – แบบก่อนลาดับ ( Root – Left – Right)
2. InOrder – แบบตามลาดับ (Left - Root – Right)
3. PostOrder – แบบหลังลาดับ (Left – Right - Root)
void PreOrder(TYPE_NODEPTR T) void InOrder(TYPE_NODEPTR T) void PostOrder(TYPE_NODEPTR T)
{ { {
if(T != NULL){ if(T != NULL){ if(T != NULL){
printf(" %d ",T->Info); InOrder(T->Left); PostOrder(T->Left);
PreOrder(T->Left); printf(" %d ",T->Info); PostOrder(T->Right);
PreOrder(T->Right); InOrder(T->Right); printf(" %d ",T->Info);
} } }
} } }
รหัสนศ. 116630462036-0 ชื่อ สกุล นายณัฐชัย ยิม้ ฉาย กลุม่ 1 .

การทดลองที่ 4 ทดลองรันโปรแกรมลักษณะตามด้านล่างนี ้ แล้วตรวจสอบผลลัพธ์ดา้ นขวา


printf("------- 7 -----\n"); ------- 7 -----
T=MakeT(T,8); P=T; InOrder(T); printf(“\n”); 8
InsertLeft(P,4); InOrder(T); printf(“\n”); 48
InsertRight(P,12); InOrder(T); printf(“\n”); 4 8 12
P=GotoLeft(P);
InsertLeft(P,2); InOrder(T); printf(“\n”); 2 4 8 12
InsertRight(P,6); InOrder(T); printf(“\n”); 2 4 6 8 12
P=GotoMother(P);
P=GotoRight(P);
InsertLeft(P,10); InOrder(T); printf(“\n”); 2 4 6 8 10 12
InsertRight(P,14); InOrder(T); printf(“\n”); 2 4 6 8 10 12 14

You might also like