--- title: ฝึก PE โครงสร้างข้อมูลอัลกอริทึม 23 ส.ค. 2022 ภูมิ subtitle: date: วันจันทร์ที่ 5 กันยายน 2565 เวลา 09.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์สุธาสินี) คราวนี้นะคะ ก่อนที่เราจะขึ้นเรื่องใหม่ เดี๋ยวครูจะทวนของนะคะ ที่เราเรียนผ่านกันมาจะมี 2 เรื่องนะคะ stack กับ qeueStack กับ queueนะคะ จะมีลักษณะจัดเก็บข้อมูลคล้าย ๆ กันถ้าเราเข้าใจ stack เราก็น่าจะเข้าใจ qeue นะคะ มันจะมองในมุมตรงกันข้ามกันคราวนี้ ถ้าเราดูว่าStack เป็นอย่างไรตามหัวข้อที่ครูลิสต์มาให้ qeue ตามที่เราเปรียบเทียบกันมีความแตกต่างกันอยู่นะ แต่เราต้องจับประเด็นให้ได้ว่าอะไรที่มันหัวข้อเดียวกันแล้วความต่างแต่ละตัวมันเป็นอย่างไร เราเริ่มต้นที่ stackนะคะ ถ้าเราพูดถึง Stack ลักษณะของการจัดเก็บข้อมูลก็คือ เข้าก่อนออกทีหลัง เข้าก่อนออกทีหลังนะคะ ถ้าเราอยากจะนึกเป็นภาพนะว่าเอ๊ะลักษณะของการเข้าก่อนออกทีหลังเป็นอย่างไร ให้ทุกคนนึกถึงหลอดใส่ CD ข้อมูลที่อยู่ใต้น่ะอยู่อันแรกสุดเลย จะอยู่ด้านล่างใช่ไหมคะ ข้อมูลที่ถูกเอาเข้าไปเก็บในหลอดซีดีอันสุดท้ายน่ะ มันจะอยู่ด้านบนสุดเวลาเราดึงออกมาใช้ เราก็ดึงข้างบนน่ะดึงออกมาใช้ทีละตัวเพราะฉะนั้น ตัวที่เก็บล่าสุดจะเอาออกมาใช้งานก่อนนะคะ ก็จะเข้า Concept ของ Stack คือเข้าก่อนออกทีหลัง หรือชามก๋วยเตี๋ยวเหมือนกันเขาล้างเสร็จเขาก็ตั้งชั้นขึ้นมาใช่ไหม เวลาเรามาซื้อเขาก็จะหยิบออกมา หยิบออกมานะคะ แล้วคำสั่งที่เราใช้ใน Stackมีอะไรบ้าง เรามีคำสั่งอยู่แค่ 2 ตัวที่ใช่ใน stack คือ push กับ popPush คือใส่เข้าไป เรา Pushใส่เข้าไปนะคะ ส่วน Pop ก็คือดึงออกมานะ เรา pop ก็คือดึงข้อมูลออกมาจาก Stackนะคะ เวลาเราจัดเก็บข้อมูลในStack ให้นึกถึง List นะคะ ให้นึกถึง Listให้นึกถึงเป็นตาราง ให้นึกถึงลักษณะที่เป็นลักษณะที่เป็นตารางนะคะ Pushก็คือค่อย ๆ ใส่ข้อมูลเข้าไปทีละช่อง ทีละช่อง แล้วเวลา popPop ก็คือข้อมูลไหนที่เราใส่ล่าสุดน่ะเมื่อเราสั่ง Pop มันจะถูกเอาออกมาทำงานก่อนแล้วตัวกำกับหรือตัวชี้ว่าข้อมูลล่าสุดที่อยู่ใน Stack มันอยู่ตรงไหน ใช่ไหมคะ Stack มันมีทางเข้าทางออกเพียงแค่ 1 ทางเท่านั้นเพราะฉะนั้น มันจะมีม Top นะคะ ตัว Top นี่เป็นตัวบอกว่าข้อมูลล่าสุดที่อยู่ใน Stack มันอยู่ใน Indexที่เท่าไร เพราะฉะนั้น Topจะเป็นตัวบอกตำแหน่งว่าข้อมูลล่าสุดที่อยู่ในตำแหน่งนี่มันอยู่ตำแหน่งที่ Index ที่เท่าไหร่ถ้าเราวาดเป็นตาราง 1 แถว หลายคอลใช่ไหมคะ Index ก็คือช่องแรกเราจะหมายเลขช่อ คือ 0 1, 2, 3 ไล่ไปเรื่อย ๆ เพราะฉะนั้น หมายเลข Index นั่นล่ะ คือตัว Top ที่บอกว่าตัวล่าสุดมันอยู่ช่องไหนนะคะ ถ้า stack ว่าง หมายถึงอะไร เราไม่มีข้อมูลอยู่ใน Stack เลย เพราะฉะนั้น ค่า Topจะเป็นเท่ากับ -1 คือไม่ได้บอกเลยว่าอยู่ช่องที่เท่าไรเลย แต่จะเริ่มต้นที่ 0 นะคะ เราเริ่มต้นที่ Top เท่ากับ -1 นะคะ แล้วมาดูอีก 1 ตัว คือ qeue แล้วอันนี้จะใกล้ตัวเรามากขึ้น เหมือนกับที่เราไปต่อคิวซื้อข้าว ไปต่อคิวทำกิจกรรมต่าง ๆ เข้าก่อน ก็ต้องออกก่อน เพราะฉะนั้น qeue จะมีทางเข้าออกอยู่ 2 ทางนะคะ ออกข้างหน้า เข้าข้างหลังนะคะ คิว มีทางเข้าทางออก 2 ทาง เข้าข้างหลังออกข้างหน้าใช่ไหม คนมาก่อน ก็ต้องออกข้างหน้าเวลาเข้า ก็คือเข้าข้างหลังนะคะ เหมือนเราไปต่อคิวน่ะมันมีทางเข้าทางออกกันคนละทางคำส่งที่ใช้ในคิวมีอยู่ 2 ตัวเหมือนกัน เข้า กับเอาเข้ากับเอาออกเหมือนกันนะคะ เราจะใช้คำสั่ง EnqeueEnqeue Enter คิวนะคะ ส่วน Dequeก็คือเอาออก deqeue ก็คือเอาข้อมูลออกมันก็จะตรงกับ Push กับ Popคิวก็คือ Enqueueแล้วตัวกำกับข้อมูลที่อยู่ใน qeue เราใช้ค่าอะไรเป็นตัวกำกับคิวเราก็มองเป็นลิสต์เหมือนกัน เป็นช่อง ๆ หมายเลขช่อง เราเริ่มต้นหมายเลขช่องแรกก็คือ 0ตัวกำกับจะมี 2 ตัวนะคะ ก็คือ fromtกับ rear front คือข้างหน้าrear คือข้างหลัง คือ F กับFront จะเป็นตัวบอกข้อมูลว่าตัวไหนที่จะถูกเอาออก เพราะมันเอาออกข้างหน้านะคะ จะชี้อยู่ด้านหน้า เป็นตัวบอกว่า frontกำกับอยู่ที่ช่องไหน ถ้าข้อมูงนั้นจะถูกเอาออกส่วน rear จะเป็นตัวกำกับอยู่ที่ทางเข้านะคะ rear จะบอกตำแหน่งล่าสุดของข้อมูลว่า ข้อมูลตัวที่เข้าล่าสุดใน queue อยู่ที่ตำแหน่งไหนก็ระบุค่า index ก็คือหมายเลขช่องที่ค่าข้อมูลนั้นอยู่คิวว่าง คิวว่าง แสดงว่ามันว่างนะ queue ว่าง ก็คือไม่มีข้อมูลอยู่ใน queue เลยfront กับ rear จะมีค่าเป็น -1 นะคะ front กับ qeueเป็น -1โอเค อันนี้ครูทบทวนให้นะสรุปมาให้ว่า Stack กับ queue เป็นอย่างไรคราวนี้ก่อนที่จะขึ้นเรื่องใหม่ ครูมีแบบฝึกหัดลองทำดูว่าเข้าใจหรือเปล่า ครูจะค้างหน้านี้เอาไว้ให้นะคะ แจกคนละชุดนะคะ หรือสามารเปิดในสมุดได้นะคะ คราวที่แล้วน่ะที่เราทำไปนะในเรื่องของ Queue นะเราก็ไปทบทวน เปิดไปทบทวนได้ก่อนจะขึ้นเรื่องใหม่ ลองดูนะคะ ว่าเรายังจำได้ไหม นี่ frontStack กับ Queueดูนะคะ ครูมีอยู่ทั้งหมด 5 ข้อด้วยกัน ทำลงในกระดาษที่ครูแจกเลยเขียนลงไปในนี้เลยนะคะ ข้อ 1 กับข้อ 2 ให้เขียนอธิบายนะคะ ว่าลักษณะของ Stack เป็นอย่างไรลักษณะของ Queue เป็นอย่างไรคำสั่ง Push 5 หมายถึงอะไร ครูระบุไว้ให้แล้วนี่ Push หมายถึงอะไรเรา Push ข้อมูลอะไรลงไป ก็เขียนอธิบาย คำสั่งนี้ทำอะไร คำสั่ง Pop ทำอะไรถัดมา ก็จะมากำหนดค่า Top ครูมี Stack ให้แล้วเมื่อเราใช้คำสั่ง Push แล้วนี่ ค่า Top จะมีค่าเป็นอะไรหลังจากใช้คำสั่ง Pop แล้วค่า Top จะเป็นอย่างไรนะคะ Queue ก็เหมือนกันเริ่มต้น เขียนชื่อลงในกระดาษแผ่นแรกนะคะ (อาจารย์สุธาสินี) คราวนี้มาดูพร้อมกันเห็น...มาดูพร้อมกันนะคะ ตัวนี้คือ Stack นะนะคะ Stackคือเข้าข้างหลังออกข้างหลังใช่ไหมคะ Stack นะเข้าข้างหลังออกข้างหลังก็คือทางเข้าทางออกอยู่ด้านหลังนะคะ คำสั่งตัวแรกดู ครูสั่งอะไรคะ PushPush คือใส่ ครู Pushอะไรคะ ครู Push เลข 3 คำสั่งคือใส่ ข้อมูลเลข 3 เพราะฉะนั้น ครูใส่ตรงไหน ใส่ข้างหลังเห็นไหมคะ ครูใส่เลข 3เห็นไหมคะ ครูใส่เลข 3 ลงมามันมีที่ว่างตรงไหนคะ ครูหาทีว่างใส่นะนี่ครูเจอช่องนี้ว่างพอดีเลย เพราะฉะนั้นเลข 3 ครูก็อยู่ที่ช่องนี้นะคะ เลข 3 นี่ครูมาอยู่ที่ช่องสุดท้าย เพราะมันมีช่องใส่อยู่ช่องเดียวน่ะ ข้างหน้ามันเต็มหมดแล้วแล้วค่า Top จะเป็นอะไรค่า Top เป็นอะไร เราก็ต้องดูสิว่าค่าเลขช่องนี้มันอยู่ช่องหมายเลขอะไร เราก็ต้องเริ่มเขียนจากช่องแรก ก็คือหมายเลขหมายเลข 3 หมายเลข 4 ถูกไหมคะ เพราะฉะนั้นแล้วนี่ ข้อมูลของครูอยู่ช่องหมายเลขอะไร หมายเลข 4 เพราะค่า Top จึงมีค่าเท่ากับ4 เห็นไหมคะ มันตรงกันนะข้อมูลครูอยู่ตรงนี้ ครูมันคือ 4 Top ครูเลยมีค่าเท่ากับ 4คำสั่ง Push นะคะ เดี๋ยวเรามาดูคำสั่ง Push อีก 1 ตัวดูสิคะ Push เหมือนกัน เห็นไหมคะ เจอ Push แสดงว่าใส่ข้อมูลใช่ไหม Push คือใส่ข้อมูล ใส่ข้างไหน คือใส่ข้างหลัง แล้วก็ใส่ลงมานะคะ คือ ใส่หมายเลข 10 พอครูใส่หมายเลข 10 เห็นไหม มันมีที่ว่างมันค่อย ๆ ไหลลงมา ไหลลงมานะคะ ก็เลยมาใส่ที่ช่องหลังเลข 3 แล้วหมายเลขช่องคืออะไร เราก็เขียนเหมือนเดิม 0 12 เพราะฉะนั้น ค่าTop เลยมีค่าเท่ากับ 2 เห็นไหมคะ เพราะข้อมูลของเรานี่ อยู่หมายเลข 2 โอเค ถัดมา เราเจอคำสั่งใหม่แล้ว คำสั่ง Pop Pop คือเอาข้างหลังออกเอาข้อมูลที่อยู่ข้างหลังออก คือ pop เพราะฉะนั้น ข้อมูลที่อยู่ข้างหลังคือ เลข 9 ใช่ไหมคะ ข้อมูลที่อยู่ข้างหลังตัวหลังสุดคือเลข 9 ไม่ใช่ค่ะ คือ เลข 4 พูดผิด ตัวหลังสุด คือ เลข 4 เพราะฉะนั้น ครูเอาเลข 4 ออก ถูกไหมคะ ครูลบมันทิ้งไปเลย ครูลบมันทิ้งPop คือเอาออก เพราะฉะนั้น มันจะไม่มีข้อมูลหมายเลข 4 อยู่ใน stack ของเราแล้ว เพราะฉะนั้น ข้อมูลตัวล่าสุดของเราเลขอะไรคะ เลข 9 ถ้าเลข 9 เราอยู่ที่หมายเลขช่องอะไรเราไม่รู้เราก็เขียน 0, 1, 2เพราะฉะนั้น ค่า pop ก็คือ ค่า 2 นะคะ อันไหนที่เราตัดทิ้งเราก็ลบออกไปเลยถัดมา เรา pop อีกแล้ว pop คืออะไรคะ เอาออกเราก็เขียนไว้ก่อนนะ Pop คือเอาออกเอาตรงไหนออก มันเหลือตัวเดียวน่ะมันมีเลข 7 ตัวเดียว เพราะฉะนั้น เราต้องเอาเลข 7 ออก เพราะฉะนั้น ตอนนี้เรามีข้อมูลใน stack ไหมจะเป็น 0 ได้ไหม ไม่ได้ถูกไหมคะ เป็น 0 ไม่ได้ ถูกไหมคะ เพราะฉะนั้นTop ของเราจึงมีค่าเป็น -1ตามที่ครูบอกนะ stack ว่าง มีค่าเป็น -1โอเคเราลองมาดูqueue queue queueเห็นไหมคะ ครูบอกแล้วตัวนี้คือ Queueครูก็บอกแล้วว่า อันนี้ คือqueueจะมีตัวกำกับหรือตัวชี้อยู่ 2 ตัว ก็คือ frontกับ rear คือ f กับ rใช่ไหมคะ Front อยู่ข้างหน้าrear อยู่ข้างหลังจะมีคำสั่ง enqueueกับ dequeue ใช่ไหมคะ dequeueคืออะไร เอาออกdequeue คือ เอาข้อมูลออกเอาข้างหน้าออกเห็นไหมคะ Dequeue คือ เอาข้างหน้าออกเพราะฉะนั้น เอาเลขอะไรออกคะ เลข 7 เอาเลข 7ออก เพราะฉะนั้น ข้อมูลตัวแรกคืออะไร เราเขียนตัวเลขก่อนข้อมูลตัวเลขจะอยู่ที่เลข 6 ใช่ไหม มันตรงกับเลขอะไร ช่อง 1ก็คือ front ก็คือข้างหน้าถูกไหมตัวสุดท้ายอยู่ช่องเลขอะไรเลข 3 นะคะ อันนี้คือตัวแรกอันนี้คือตัวแรก อันนี้คือตัวสุดท้ายถัดมาครูใช้คำสั่ง enqueueเราเห็น Enqueue ว่ามีตัวเลขใช่ไหมคะ แสดงว่าต้องเอาเข้าน่ะ เอาเข้าถูกนะเอาเข้าข้างหน้าหรือข้างหลังข้างหลังเอาเลข 3 เข้าถูกไหมคะ พอครูเอาเลข 3 เข้า จะไปอยู่เลขไหนจะอยู่หลังหมายเลข 6เราใส่เลขกำกับก่อน 0 12 ข้อมูลตัวแรกอยู่ที่ไหนคะ0 ข้อมูลตัวสุดท้ายอยู่ที่ 2 front บอกfront จะบอกข้อมูลตัวแรกใช่ไหมคะ ส่วน rear จะบอกข้อมูลตัวสุดท้ายถัดมาEnqueue เอาเข้าเอาออกเอาเข้าเอาเข้าข้างหลัง เอาอะไรคะ เอา 8 เข้า เพราะฉะนั้นมันจะไปอยู่ที่ช่องหลังเลข 4 มันมีหมายเลขช่องไหม มีข้างหลัง ก็คือ rear ใช่ไหม8 อยู่หมายเลข 3 ตัวแรก อยู่ช่องหมายเลข1 เห็นไหมคะ อันนี้คือช่องแรก อันนี้คือช่องสุดท้ายถัดมาdequeue คืออะไรคะเอาออก เอา...เอาข้างหน้าออกใช่ไหมคะ เพราะฉะนั้น เอาหมายเลขอะไรออก หมายเลข 4เพราะฉะนั้น ข้อมูลจะเหลือแค่ 1 ตัวเพราะฉะนั้นอยู่ช่องอะไรคะ หมายเลข 2 มีข้อมูลอยู่แค่ตัวเดียวเห็นไหมคะ หมายเลขช่อง ก็คือเลข 2 ถัดมาDequeue Dequeueคืออะไรคะ เอาออกอีกแล้วเอาอะไรออก เอา2 ออก ตอนนี้มีอะไรใน queueไม่มี เพราะฉะนั้น จะมีค่าเป็น -1 คือ queue ว่างเมื่อกี้เราใช้คำสั่ง Enqueue กับ Dequeueเพราะฉะนั้น Endqueue 5หมายถึงอะไรคะ เอาข้อมูลเลขอะไรเอาข้อมูลเลข 5 เข้าไปใน queueใช่ไหมคะ dequeue คืออะไร เอาข้อมูล ทำไมคะ ออกจาก queueโอเคถ้า Push คือ stack เอาข้อมูลอะไรเอาข้อมูล 5ใส่ลงไปใน Stack 5 มาจากไหนนี่นะ มันบอกนี่คำสั่งมันบอกว่าเอาเลข 5 นะคะ ส่วน Pop คืออะไร คะเอาข้อมูลออกจาก Stack เอาข้อมูลข้างหลังหรือข้างหน้าออก Stack เอาข้อมูลข้างหลังหรือข้างหน้าออกข้างหลัง ถูกไหมคะ เอาข้อมูลข้างหลังออกเอาข้อมูลจากข้างหลังนะคะ ออกเดี๋ยวถ่ายรูปนะคะ ลงใน classroom หน่อยถ่ายรูปแบบฝึกหัดที่ทำนะคะ ลงใน Classroom เสร็จแล้วทุกคนถ่ายรูปนะคะ แล้วก็โพสต์ลงไปใน classroomถ่ายให้ครบ 3 แผ่นเลยนะ มี 4 คนทุกหน้าคุณแม่เสร็จแล้วเดี๋ยวครูให้เบรก 5 นาทีนะ เดี๋ยวมาขึ้นเรื่องใหม่นะคะ จะให้เบรกก่อนจะได้เคลียร์ของเก่าโอเค มาต่อนะคะ จะเป็นอีก 1 โครงสร้างนะ เราพูดถึง Stack กับ Queueไปแล้วนะคะ Stack กับ queueมันข้อมูลมันจะเรียงกันเป็นแถวอาจจะเป็นแนวตั้งหรือแนวนอนก็ได้ แต่ทีนี้ ถ้ามีข้อมูลนะคะ ที่มันไม่ได้จัดเก็บเป็นแนวข้อมูลหรือเชิงโครงสร้าง เป็นแนวตั้งหรือแนวนอนนะคะ เป็นแนวตั้ง แนวนอน แต่ข้อมูลเรานะคะ มีลักษณะการจัดเก็บเป็นลำดับชั้น แล้วเราจะเก็บข้อมูลแบบไหน เราก็จะมีรูปแบบนะคะ แบบแรกเราจะเรียกว่า"โครงสร้างข้อมูลแบบต้นไม้" แล้วก็มีอีก 1 แบบนะคะ ที่จัดเป็นแบบเชื่อมโยงเครือข่ายได้นะคะ คือ กราฟกับต้นไม้นะเราเรียนต้นไม้ก่อน เสร็จแล้วเราจะมาเรียนกราฟลักษณะของโครงสร้างข้อมูลแบบต้นไม้จะเหมือนกับ folderจะลักษณะเหมือนกับ Folder เลยมีตัวแม่ คลิกเข้าไปก็มีลูก ถูกไหมคะ คลิกเข้าไปก็มีตัวลูกเรื่อย ๆ นะ คราวนี้ในการจัดเก็บข้อมูลโครงสร้างข้อมูลแบบต้นไม้นะคะ เดี๋ยวเราลองจินตนาการนะต้นไม้นะคะ เดิม รากมันจะอยู่ด้านล่าง ถูกไหม ต้นไหมที่เราปลูกต้นไม้มันจะอยู่ด้านล่าง เรากลับดึงแรก ขึ้นมาไว้ข้างบนนะคะ ลักษณะแบบนี้ ตัวบนสุดก็คือ รูทโหนดก็คือตัวพ่อแม่เลยน่ะ คือ รูท ถ้าเทียบกับบรรพรุต ทุกคนนึกภาพโครงสร้างบรรพบุรุษที่อยู่ในบ้านเราได้นะ เราจะมีบรรพบุรุษตั้งต้นแล้วก็มีลูกหลายแตกแขนงมาเรื่อย ๆ นะคะ ลักษณะแบบเดียวกัน บนสุด คือ บรรพบุรุษโหนดคือต้นกำเนิดเลย แต่รูตโหนดเรามีอยู่แค่ 1 โหนดเท่านั้นนะคะ ตัววงกลมจะเรียกว่า "โหนด" ตัวกลม ๆ จะเรียกว่า "โหนด"เสร็จแล้วนี่นี่คือบรรพบุรุษถูกหรือเปล่า บรรพบุรุษ มี 1 โหนดนี่ ก็มีลูก เห็นไหมคะ บรรพบุรุษก็มีลูก ลูกก็มีหลานออกมาใช่ไหมคะ กลุ่มนี้ คือพี่น้องนะ คือพี่น้องที่มีพ่อเดียวกันกลุ่มนี้นะคะ ด้านซ้ายกับด้านขวาเป็นลูกพี่ลูกน้อง ใช่ไหม ลูกพี่ลูกน้องอันนี้คือพ่อเรา อันนี้...คือลูกพี่ลูกน้องเราโอเคตัวที่อยู่ล่างสุดนะคะ ตัวที่อยู่ล่างสุด เราจะมีชื่อเรียกว่า"ลิสต์โหนด" ก็คือเราเป็นรุ่นยังไม่มีใครต่อจากเราเรายังไม่ได้แต่งงานถูกไหมคะ เราจะเปรียบเป็นลีฟโหนดของตระกูลนะเป็นคนล่างสุด เป็นคนชั้นสุดท้ายของตระกูลนะคะ เราจะเห็นว่าลักษณะของโครงสร้างข้อมูลแบบนี้เราเห็นเป็นลำดับชั้นถูกไหมคะ อันนี้ คือชั้นที่ 1ชั้นที่ 2 ชั้นที่ 3 ไล่ลงมาเรื่อย ๆ นะคะ โอเคตัวบนสุด เรียกว่า"root node" rootคือ root node คือโหนดแม่ตัวล่างสุดเรียกว่า "leนะคะ คือ ลีฟโหนด คือ ตัวสุดท้าย จะเห็นว่าลีฟโหนด มี 7 มี 9 มี 15มี 45 แล้วก็ 77 พวกนี้ที่อยู่ล่างสุดนี่เรียกว่า "left node" ทั้งหมดเลยข้างบน ข้างบนเลข 7 คือ พ่อนะgiเราไม่พูดถึงแม่แม่นะคะ เราเรียกพ่อนะ พ่อของ 7คือ 13 ลูกของ 13 คือ 7, 915 นะคะ พ่อของ 13 คืออะไร 23 โอเคคราวนี้ จากตรงนี้นะคะ เราดูการเรียกชื่อ หรือว่าลำดับของการเรียกชื่อโหนด 23 มันอยู่บนสุดเราจะเรียกว่ามันคือ รูตโหนดตัวนี้นะคะ โหนดที่อยู่บนสุดก็คือ root nodeตัวนี้นะคะ เพราะว่ามันคือโหนดแรกสุดนะถัดมาโหนด 23 นี่เชื่อมไปยังโหนด 13 กับ 54 นะคะ มันเป็นพ่อของ 13 กับ 54 นะมันเป็นพ่อของ 13 กับ 54เสร็จแล้ว 13 กับ 54 นี่เป็นลูก เป็นลูกของ 23 นะคะ 7, 9, 15 โหนด 7 โหนด 9 โหนด 15เป็นลูกของโหนด 13ลิฟโหนดคือโหนดล่างสุดของต้นไม้นะ โหนดที่อยู่ด้านล่างสุดของแต่ละกิ่งของต้นไม้ไม่มีอะไรต่อลงไปอีกแล้ว เราเรียกตัวนั้นว่าleaf node นะคะ เห็นไหม เริ่มต้น รูตโหนด คือ 23 นะคะ คราวนี้ระดับของโหนด ก็คือลำดับชั้นของโหนดน่ะ เราเริ่มที่ลำดับชั้นของนะคะ ลำดับชั้นของต้นไม้นะคะ เราเราเริ่มต้นที่ 0 เพราะฉะนั้น ตัวบนสุด จะอยู่ level ระดับ 0 นะคะ 15...3 กับ 54 จะอยู่ระดับ 1ระดับ 2 ระดับ 3 ไล่ลงมาเรื่อย ๆ โหนดพ่อ พ่อก็คืออยู่สูงกว่าตัวเองเห็นไหม ลูกก็คือ ณ โหนดที่กล่าวถึงพ่อก็คืออยู่ระดับสูงขึ้นไป ลูกก็คือระดับล่างลงไป 1 ชั้นนะคะ โหนดพี่น้องจะเป็นพี่น้องกันได้ต้องพ่อเดียวกัน 7, 9, 15เพราะมีพ่อเดียวกันถูกไหม เพราะมีพ่อเดียวกันแต่ 46 กับ 77 ก็เป็นพี่น้องกันถูกไหมคะ พ่อเดียวกัน 15 กับ เป็นลูกพี่ลูกน้องกันนะ เป็นญาติกัน เป็นลูกพี่ลูกน้องกันลีฟโหนด ก็คือโหนดล่างสุดไม่มีอะไรทิ่มลงไปแล้ว ไม่มีอะไรแตกออกมาอีกแล้ว โหนดนี้ไม่มีอะไรแตกออกมาอีกแล้ว มันสุดท้ายแล้วส่วน ดีกรี ดีกรีคือจำนวณลูกทั้งหมดของโหนดที่กล่าวถึงเช่น ดีกรีของ 46 คืออะไร คือ 1ดีกรีคือจำนวนลูก ดีกรีคือจำนวณลูกนะคะ 46 มีลูกอยู่ 113 มีลูกอยู่ 3 47มีลูกไหมคะ ไม่มี77 มีลูกไหม ไม่มี เพราะฉะนั้น ดีกรีมีค่าเป็นอะไรคะ เป็น 0มีกระดาษไหม หยิบกระดาษให้ครูหน่อยครูมีรูป ครูมีรูปนี้นะคะ เขียนด้านหลังกระดาษที่ครูให้ไปก็ได้ตอบให้ครูหน่อย ... นี่ตอบอะไรเอ่ย วาดรูปก่อนนะ แล้วก็ตอบว่าข้อ 1 โหนดคืออะไร ข้อ 2 ข้อ 3 ข้อ 4 ข้อ 5 ข้อ 6 ข้อ 7 ใครมีสมุด ทำลงสมุดนะคะ วาดรูปด้านซ้ายก่อน แล้วก็เขียนตอบด้านขวาลอกโจทย์ด้วยนะ เช่นระดับของโหนด 30 คือ... ตอบมาอันนี้ครูก๊อป (ปี้) ก๊อปฯ คำอธิบายมาให้นะคะ จะได้เห็นด้วย root nodeคืออะไร ระดับของโหนดคืออะไร ดีกรีคืออะไร คราวนี้ดู ดูอีกทีหนึ่งนะคะ ดูอีกทีหนึ่งนะในโหนดนะคะ ที่ครูให้ เดี๋ยวนะจากต้นไม่นะคะ ที่เราเห็นต้นนี้นะ จากต้นไม่ต้นนี้นะคะ ที่เราเห็น1 ต้นนี่ ถ้าเราพูดถึงพ่อนะคะ พ่อแสดงว่าคนที่อยู่สูงกว่าเราพ่อของเรานี่ แสดงว่าลำดับชั้นนี่จะอยู่สูงกว่าถูกไหมคะ ลูกของเราจะต้องอยู่ต่ำกว่าเรานะคะ อย่างเช่น55 นะคะ ครูพูดถึง55 พ่อของ 55 คืออะไร พ่อก็อยู่ข้างบนถูกไหมคะ ก็คือ50 ถูกไหม อันนี้คือพ่อ55 คือ ลูกของ 50 ถูกไหมคะ ลูกของ 50 ถูกไหมคะ แล้วลูกของ 55 คืออะไร คะ52 อันนี้คือลูก เห็นไหมคะ เราพูดถึงโหนดนี้เราพูดถึงโหนด 55 พ่อของ 55 คืออะไร คือ 50 ลูกของ 55 คืออะไร 52 เห็นไหมคะ มันอยู่ด้านล่างนี่คือลูกถัดมา พ่อของ 70 แสดงว่ามันต้องอยู่ข้างบนใช่ไหม คืออะไร คือ 40 ใช่ไหมคะ พ่อของ 70 ก็คือ 40แล้วลูกของ 70 คืออะไร พี่น้อง หมายถึงพี่น้องหมายถึงพ่อเดียวกัน พี่น้องคือพี่น้องพ่อเดียวกัน พี่น้องของ 20 คืออะไร 70 เพราะอะไร เพราะมีพ่อเดียวกันเดียวกันนี่ไง เพราะมีพ่อเดียวกันถึงเป็นพี่น้องกันโจทย์ข้อแรก รูตโหนดรูตคืออะไรคะ ตัวบนสุดรูตคือตัวบนสุดใช่ไหมคะ ตัวบนสุดคืออะไร 40 ถูกไหมคะ บนสุดคือ 40 พ่อของ 50 พ่อ แสดงว่าดูข้างบนนะ พ่อของ 50 คืออะไร 70นะคะ พ่อของ 50 ก็อยู่ด้านบน ถูกเปล่า อยู่ด้านบนตัวเองน่ะ ตัวเองเชื่อมมาจากเส้นอะไรก็คือ 70 ถัดมา ลีฟโหนด คือ โหนดที่ไม่มีลูก ก็คือไม่มีอะไรต่อท้ายลงไปแล้วโหนดที่ไม่มีอะไรต่อท้ายตัวเอง คือไม่มีลูกน่ะมันสิ้นสุดที่ตัวเอง มันไม่มีอะไรไปต่อท้ายแล้ว เพราะฉะนั้น ลีฟโหนดเรามีกี่ตัว3 ตัว ก็คืออะไร คะ30, 45แล้วก็52ก็คือตัวที่ไม่มีลูกน่ะ ไม่มีลูกนี่ ไม่มีลูก อันนี้ก็ไม่มีลูกถัดมา พี่น้องพูดถึงพี่น้องต้องพ่อเดียวกัน พี่น้องของ 45 คืออะไรคะ55 เพราะอะไรเพราะพ่อเดียวกันเดี๋ยวนะนี่ไง พี่น้องของ 45 ืก็คือ 55 เพราะมันพ่อเดียวกันไง พ่อ ก็คืออะไร 50 ต่อนะคะ พี่น้องของ 50 นี่ดูสิ 50 มีพ่อคือ 40 ใช่หรือเปล่ามีพ่อคือ 70 มีพี่น้องไหมไม่มี ไม่มีพี่น้องนะคะ เป็นลูกคนเดียว หรือขีด - ไม่มีพี่น้อง เป็นลูกคนเดียวนะคะ ถัดมาระดับของ 30 คืออะไร ระดับคืออะไร คะชั้น ลำดับชั้นจากรูตโหนด โดยเริ่มต้นที่ 0 ชั้นนี้มีระดับเป็น 0 ใช่ไหมคะ ชั้นนี้ระดับเป็น 1 ชั้นถัดมาระดับเป็น 2 แล้วก็เป็น 3 30อยู่ระดับไหนคะ ระดับ 2 55ดีกรีคืออะไร คะ จำนวนลูก มีลูกกี่คน55 มีลูกกี่คน คนเดียว นะคะ นี่ไง 55 มีลูกกี่คน มีลูกคนเดียวนะคะ เห็นไหมก็ตอบ 1 ดีกรีของ 55 คือ 1 ดูนะคะ ครูให้วาดต้นไม่เครือญาตินะสมชายเป็นต้นตระกูล สมชายอยู่บนสุดสมชายมีลูก 2 คน คือ A กับ B A มีลูก 1 คน ชือ C B มีลูดอีก 3 คน ชื่อ D E F และ F ก็มีลูก 1 คน ชื่อ Z วาดต้นไม้เครือญาติให้ครู เราเริ่มต้นถูกไหมคะ ต้นตระกูลของคือใคร คือ สมชาย เพราะทุกคนต้องมีสมชายเป็นจุดเริ่มต้นนะคะ เป็นต้นตระกูลของบ้านน้อย สมชายมีลุกกี่คน2 คน ใช่ไหม ช่วยครูวาดต่อหน่อย คือ A กับ B เราวาดต่อให้ครูหน่อย A มีลูก 1 คน ชื่อ C สมชายมีลูก 2 คน คือ A กับ B ใช่ไหมคะ A มีลูกกี่คน มีลูก 1 คน ใช่ไหมคะ ก็ลากต่อจาก A ใช่ไหมคะ เพราะมันเป็นลูกของ A น่ะ มาลากออกเป็นลูกคนอื่นไม่ได้เราก็วาดออกจาก A เพราะ A มีลูก 1 คน B มีลูกกี่คน 3 คน เพราะฉะนั้น ต้องมีกี่เส้น 3 เส้นนะคะ เห็นไหม ครูก็มีเส้นจาก B 3 เส้นนะคะ วาดลูกก่อน ลูกคนแรก ชื่อ D, E แล้วก็ F ใช่ไหมคะ คนอื่นไม่มีลูกเลยนะ D กับ E ไม่มีลูกเลยแต่ F คนเดียวที่มีลูกใช่ไหมคะ ก็คือ Z อันนี้เครือญาติของบ้านสมชายใช่ไหมคะ เป็นแบบนี้ครูถามต่อ จากรูปนี้ รูตโหนดคืออะไรคะ รูตโหนดคืออะไร ก็คือโหนดที่ชื่อ สมชาย ถูกไหม ก็เขาอยู่บนสุด เขาเป็นต้นตระกูลของบ้านหลังนี้ลิฟโหนดคืออะไรคะลีฟโหนดลีฟโหนด คือโหลดที่มีลูกไหม ไม่มีลูกเพราะฉะนั้น อันไหนที่ไม่มีลูกC, D,E แล้วก็ Z เห็นไหมคะ คนเหล่านี้เป็นโสด ถ้าเทียบนะคนเหล่านี้เป็นโสดยังไม่ได้แต่งงานเลยนะคะ ยังเป็นโสดอยู่ไม่มีลูกพี่น้องของ D คือใครพี่น้องของ D มีใครบ้างD Dog D Dog พี่น้องของ D. Dog มีใครบ้างE กับ F ใช่ไหมคะ พี่น้องของ D Dog Cมีพี่น้องไหมคะ C มีพี่น้องไหม ไม่มีC ไม่มีพี่น้องนะคะ C เป็นลูกคนเดียว ไม่มีพี่น้อง Z มีพี่น้องไหมไม่มีเป็นลูกคนเดียวเหมือนกัน Z ก็เป็นลูกคนเดียวโอเคจากเครือตรงนี้ใช่ไหมคะ เราวาดได้ต้นไม้ 1 ต้นนะ ถัดมาต้นไม้นี่ ในต้นไม้นะคะ เราสามารถมีต้นไม้ย่อย ที่อยู่ภายในต้นไม้ได้เช่น จากรูปนี้ตรงนี้ ฝั่งซ้ายของ 23 ย่อยนะ ของ 23 ฝั่งขวาตรงนี้ ก็คือต้นไม้ย่อยนะคะ เห็นไหม เพราะว่ามันมีกิ่งก้านสาขาแตกลงมาตรงนี้ก็เลยเป็นต้นไม้ย่อยลักษณะของต้นไม้นะคะ เดี๋ยวเราจบที่ลักษณะของต้นไม้ ลักษณะของต้นไม้ที่เราจะพูดถึง ตัวแรก Binary Treeไบ คือ 2 Binary Tree ก็คือต้นไม้ที่มีลูกได้ไม่เกิน 2 โหนดถูกไหมคะ ต้นไม้นี่ มีลูกได้ไหม เกิน 2 เห็นไหม มีได้ไม่เกิน 2 มี 1 ก็ได้นะ มี 2ก็ได้ ไม่มีก้ได้ แต่มี 3 ไม่ได้ นะคะ มีลูก 3 ไม่เข้าข่ายตัวนี้นะ เป็นต้นไม้เฉย ๆ แต่ไม่ใช่ต้นไม้Binary Tree อีก 1 ต้นไม้นะคะ BST ตรงนี้BST ตัวนี้ หรือ BinarySearch Tree มีลูก 2 เห็นไหมคะ มีลูก 2 หรือมีลูก 1 ก็ได้แต่สิ่งที่เพิ่ม คือ ลูกด้านซ้ายดูที่ 8 นะ ลูกด้านซ้าย ลูกด้านซ้าย น้อยกว่าพ่อลูกด้านขวามากกว่าพ่อซ้าย น้อยกว่าพ่อขวามากกว่าพ่อ ตัวนี้คือ Bi BST หรือว่า Binary Search Tree สังเกตง่าย ๆ เห็นไหมคะ ด้านขวาทุกตัว มากกว่า 8เลย แต่ด้านซ้ายทุกตัวต้องน้อยกว่า 8 รูปนี้เหมือนกัน ด้านขวามากกว่า 50 ด้านซ้ายน้อยกว่า 50 นะคะ รูปนี้เหมือนกัน บนสุดคือ 7 ถูกหรือเปล่าต้องน้อยกว่า 7 ด้านขวาต้องมากกว่า 7 โอเค มี 3 แบบนะ มีต้นไม้ธรรมดา ทุกอย่าง เป็นต้นไม้นะ มีต้นไม้ธรรมดา มี Binary Tree ลูก 2 แล้วก็ BST ลูก 2 เหมือนกันแต่ลูกด้านซ้ายน้อยกว่าพ่อ ลูกด้านขวา มีค่ามากกว่าพ่อโอเคเห็นไหมนะ เดี่ยวคราวหน้าเดี๋ยวครูจะมาทวนต้นไม้อีกครั้งหนึ่งแล้วเราก็พูดถึงเรื่องต้นไม้ต่อ เราจะเพิ่มโหนดเข้าไปในต้นไม้ทำอย่างไร จะลบโหนดออกจากต้นไม้ทำอย่างไรนะคะ โอเค โอเคนะคะ เดี๋ยวสัปดาห์หน้าเรามาเจอกันอีก วันนี้ก็น่าจะเท่านี้ เดี๋ยวครูจะเช็กชื่อ คราวนี้นะคะ พอดีว่าสัปดาห์หน้าครูติดลงพื้นที่