วิธีสร้าง Binary Tree ใน C

จัดโครงสร้างต้นไม้ไบนารีของคุณ ไบนารีทรีทุกต้นจะต้องมีโครงสร้าง แม้ว่าจะมีเพียงตัวแปรเดียวเท่านั้น เลือกชื่อ จากนั้นใช้ typedef เพื่อสร้าง: typedef struct student_data STUDENT_DATA;

กำหนดโครงสร้าง รวมตัวชี้สองตัวในโครงสร้างเดียวกัน: struct student_data { int student_ID; int student_grade; STUDENT_DATA ซ้าย, ขวา;};

จัดสรรตัวชี้ให้กับโครงสร้างข้อมูลนี้ โดยกำหนดค่าเริ่มต้นเป็น NULL ให้เป็นส่วนหัวของต้นไม้: STUDENT_DATA *students = NULL;

จัดสรรตัวชี้ชั่วคราวสองตัวให้กับโครงสร้างข้อมูล: STUDENT_DATA new_student, cur_student;

ใช้ malloc() เพื่อสร้างองค์ประกอบใหม่ ตรวจสอบข้อผิดพลาดเสมอ: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

เติมฟิลด์ขององค์ประกอบใหม่ ตั้งค่าฟิลด์ซ้ายและขวาเป็น NULL: new_student->student_ID = newID; new_student->student_size = ขนาดใหม่; new_student->left = NULL; new_student->right = NULL;

พิจารณาตัวแปรหัว หากตัวแปร head เป็น NULL นี่เป็นองค์ประกอบแรกที่เพิ่มลงในแผนผัง ดังนั้นให้ตั้งค่าตัวแปร head ให้ชี้ไปที่ตัวแปรนั้น เท่านี้ก็เรียบร้อย: if (!students) { students = new_student; กลับ; }

จัดการกับรายการที่ซ้ำกันหากค่าใหม่และค่าปัจจุบันเท่ากัน: if (newID == cur_student->student_ID) { abort(); }

จัดการกับค่านิยมที่ไม่เท่ากัน หากค่าใหม่น้อยกว่าค่าปัจจุบัน องค์ประกอบใหม่จะอยู่ทางด้านซ้าย เพิ่มทันทีถ้าไม่มีอะไรทางด้านซ้าย มิฉะนั้น ให้เลื่อนไปทางซ้ายแล้ววนซ้ำ: if (newID student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; ส่งคืน 1; } cur_student = cur_student->left;

ทำสิ่งเดียวกันทางด้านขวา มิฉะนั้น: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; ส่งคืน 1; } cur_student = cur_student->ขวา; }}

สร้างตัวแปรชั่วคราวที่ชี้ไปที่โครงสร้างข้อมูล: STUDENT_DATA *cur_student;

วนรอบองค์ประกอบ ตรวจสอบค่าที่ต้องการ: ในขณะที่ (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

สาขาซ้ายหรือขวา และวนซ้ำ หากไม่พบ: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } อื่น ๆ { cur_student = cur_student->left; }

ดูว่าลูปสิ้นสุดหรือไม่ หากพบ แสดงว่าคุณไม่เคยพบรายการนั้น: }return 0;

จัดสรรคืนไบนารีทรีเมื่อโปรแกรมของคุณสิ้นสุด เนื่องจากไม่ใช่ทุกระบบปฏิบัติการจะจัดการสิ่งนี้โดยอัตโนมัติ วิธีนี้ทำได้ดีที่สุดโดยใช้ฟังก์ชันเรียกซ้ำ: void deallocate_binary_tree (STUDENT_DATA *tree) {

Deallocate ทรีย่อยด้านซ้ายและขวาแบบวนซ้ำ: deallocate_binary_tree (tree->left); Deallocate_binary_tree (ต้นไม้ -> ขวา);

การค้นหาและเพิ่มลงในไบนารีทรีสามารถทำได้โดยใช้การเรียกซ้ำ การเขียนและบำรุงรักษาจะง่ายกว่ามาก แต่จะเข้าใจยากขึ้นเล็กน้อย จนกว่าคุณจะชินกับมัน เป็นเรื่องปกติที่จะสร้างไบนารีทรีที่มีเพียงพอยน์เตอร์ในโครงสร้างข้อมูล C ที่สอง ซึ่งมักจะเป็นอาร์เรย์หรือรายการที่เชื่อมโยงซึ่งมีข้อมูลจริงอยู่ ต้นไม้ไบนารีแต่ละอันเป็นดัชนีเพื่อค้นหาฟิลด์เดียวของข้อมูลรายการอย่างรวดเร็ว

การลบออกจากไบนารีทรีเป็นอัลกอริธึมที่ซับซ้อนมากในภาษาซี แต่ในการใช้งานต้นไม้ไบนารีหลายๆ อย่าง องค์ประกอบจะไม่ถูกลบ

หมวดหมู่

ล่าสุด

เสาอากาศ FM 75 โอห์มแบบโฮมเมด

เสาอากาศ FM 75 โอห์มแบบโฮมเมด

หากคุณมีเครื่องรับ FM ที่มีแจ็คสำหรับเสาอากาศภา...

วิธีการสร้างเสาอากาศทีวี VHF UHF

วิธีการสร้างเสาอากาศทีวี VHF UHF

สร้างเสาอากาศ VHF UHF ของคุณเอง เสาอากาศ UHF V...

สายสัญญาณเสียงออปติคัลดิจิทัลทำงานอย่างไร

สายสัญญาณเสียงออปติคัลดิจิทัลทำงานอย่างไร

การเชื่อมต่อ สายเคเบิลออปติคัลดิจิทัลหรือที่เร...