ความลึกและความสูงของต้นไม้แตกต่างกันอย่างไร


262

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


78
เคล็ดลับ: เพื่อหลีกเลี่ยงความสับสนระหว่างคำศัพท์: 1. ความสูง: ลองนึกภาพการวัดความสูงของบุคคลเราทำตั้งแต่หัวจรดเท้า 2. ความลึก: ลองจินตนาการถึงการวัดความลึกของทะเลเราทำจากพื้นผิวโลกถึงเตียงมหาสมุทร (รูตถึงใบไม้)
Yesh

@Yesh นี่เป็นการเปรียบเทียบที่ยอดเยี่ยม
ตัวละครพิเศษ

1
หากต้องการเพิ่ม @Yesh การเปรียบเทียบที่ยอดเยี่ยม: สำหรับบางโหนดด้านในที่อยู่ตรงกลางของต้นไม้ความลึกของมันคือจำนวนระดับที่อยู่ใต้โหนดรูท
โทมัสเหงียน

คำตอบ:


664

ฉันเรียนรู้ว่าความลึกและความสูงเป็นคุณสมบัติของโหนด :

  • ความลึกของโหนดเป็นจำนวนขอบจากโหนดไปยังโหนดรากของต้นไม้ที่
    โหนดรูทจะมีความลึกเป็น 0

  • ความสูงของโหนดเป็นจำนวนขอบบนที่เส้นทางที่ยาวที่สุดจากโหนดที่ใบ
    โหนดลีฟจะมีความสูงเป็น 0

คุณสมบัติของต้นไม้ :

  • ความสูงของต้นไม้จะเป็นความสูงของโหนดรากของมัน
    หรือเท่ากันความลึกของโหนดที่ลึกที่สุดของมัน

  • เส้นผ่าศูนย์กลาง (หรือความกว้าง ) ของต้นไม้เป็นจำนวนของโหนดบนเส้นทางที่ยาวที่สุดระหว่างสองโหนดใบ ต้นไม้ด้านล่างมีเส้นผ่าศูนย์กลาง 6 โหนด

ต้นไม้ที่มีความสูงและความลึกของแต่ละโหนด


21
+1 กำลังจะเพิ่มใบเสนอราคาที่มีเนื้อหาเดียวกันจากที่นี่: en.wikipedia.org/wiki/Tree_%28data_structure%29
PéterTörök

2
นั่นหมายถึงความสูง == ความลึกสูงสุด
roottraveller

6
@rkm_Hodor: ใช่ความสูงของต้นไม้จะเท่ากับความลึกของโหนดที่ลึกที่สุดเสมอ
Daniel AA Pelsmaeker

1
คุณช่วยอ้างอิงแหล่งที่มาของการอ้างว่าเส้นผ่านศูนย์กลางของต้นไม้นับจำนวนโหนดแทนขอบได้หรือไม่? สิ่งนี้ขัดแย้งกับคำจำกัดความตามปกติของเส้นผ่านศูนย์กลางของกราฟ (ดูเช่นen.wikipedia.org/wiki/Distance_(graph_theory) ) ซึ่งถามหาเส้นทางที่ยาวที่สุด
j_random_hacker

1
@j_random_hacker เป็นเรื่องของความหมายเลือกหนึ่งที่มีประโยชน์ที่สุดสำหรับคุณ ในการรับจากจำนวนจุดยอดถึงจำนวนขอบเพียงลบ 1 ฉันต้องการนับจำนวนจุดยอดเนื่องจากผลลัพธ์นี้ในกราฟที่มีโหนดเดียวที่มีความกว้าง 1 และกราฟเปล่าที่มีความกว้าง 0 mathworld wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker

44

ความสูงและความลึกของต้นไม้เท่ากับ ...

แต่ความสูงและความลึกของโหนดไม่เท่ากันเพราะ ...

ความสูงถูกคำนวณโดยการข้ามจากโหนดที่กำหนดไปยังใบไม้ที่เป็นไปได้ที่ลึกที่สุด

ความลึกถูกคำนวณจากการแวะผ่านจากรูทไปยังโหนดที่กำหนด .....


4
"ความสูงคำนวณจากการข้ามจาก leaf ไปยังโหนดที่ระบุ" ไม่ถูกต้อง leaf ต้องเป็นอันที่ลึกที่สุดในบรรดาใบไม้ทั้งหมดของโหนดที่กำหนด
mightyWOZ

14

ตาม Cormen et al. รู้เบื้องต้นเกี่ยวกับอัลกอริทึม (ภาคผนวก B.5.3) ความลึกของโหนด X ในทรี T ถูกกำหนดเป็นความยาวของพา ธ แบบง่าย (จำนวนขอบ) จากรูตโหนดของ T ถึง X ความสูงของโหนด Y คือ จำนวนของขอบบนเส้นทางที่เรียบง่ายที่ยาวที่สุดลงจาก Y ถึงใบไม้ ความสูงของต้นไม้ถูกกำหนดให้เป็นความสูงของโหนดรูต

โปรดทราบว่าเส้นทางแบบง่ายคือเส้นทางที่ไม่มีจุดยอดซ้ำ

ความสูงของต้นไม้มีค่าเท่ากับความลึกสูงสุดของต้นไม้ ความลึกของโหนดและความสูงของโหนดไม่จำเป็นต้องเท่ากัน ดูรูป B.6 ของรุ่นที่ 3 ของ Cormen และคณะ สำหรับภาพประกอบของแนวคิดเหล่านี้

บางครั้งฉันเห็นปัญหาที่ขอให้นับโหนด (จุดยอด) แทนขอบดังนั้นขอคำชี้แจงหากคุณไม่แน่ใจว่าคุณควรนับโหนดหรือขอบระหว่างการสอบหรือการสัมภาษณ์งาน


มีความแตกต่างหรือไม่ในการนับโหนดและขอบ ดูเหมือนว่าทั้งคู่จะให้ผลลัพธ์เดียวกัน แก้ไขฉันถ้าฉันผิด
VINOTH ENERGETIC

@jdhao ความลึกของรูทเป็น 2 ได้อย่างไร เป็น 0 (ถ้าพิจารณาขอบ) หรือ 1 (ถ้าพิจารณาโหนด)
neowulf33

@ neowulf33 ใช่ฉันผิดอย่างมหันต์ ความลึกของรูทโหนดควรเป็น 0 ฉันจะลบความคิดเห็นของฉันเพื่อไม่ให้ผู้อื่นสับสน
jdhao

2

คำตอบง่าย ๆ :
ความลึก:
1. ต้นไม้ : จำนวนขอบ / ส่วนโค้งจากโหนดรูตถึงโหนดลีฟของต้นไม้เรียกว่าเป็นความลึกของต้นไม้
2. Node : จำนวนขอบ / ส่วนโค้งจากโหนดรูทไปยังโหนดนั้นเรียกว่าเป็นความลึกของโหนดนั้น


2

อีกวิธีในการทำความเข้าใจแนวคิดเหล่านั้นมีดังนี้: ความลึก: วาดเส้นแนวนอนที่ตำแหน่งรูทและปฏิบัติกับบรรทัดนี้เป็นพื้น ดังนั้นความลึกของรูทจึงเป็น 0 และลูกทั้งหมดของมันจะโตลงดังนั้นแต่ละโหนดจะมีความลึก +1 ในปัจจุบัน

ความสูง: เส้นแนวนอนเดียวกัน แต่คราวนี้ตำแหน่งพื้นดินเป็นโหนดภายนอกซึ่งเป็นใบไม้ของต้นไม้และนับขึ้นไป


2

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

จากหนังสือOpenDSA Data Structures & Algos :

ถ้า n 1 , n 2 , ... , n kเป็นลำดับของโหนดในทรีเช่น n iเป็นพาเรนต์ของ n i +1 สำหรับ 1 <= i <k จากนั้นลำดับนี้เรียกว่าพา ธ จาก n 1ถึง n k kความยาวของเส้นทางคือ k − 1 หากมีเส้นทางจากโหนด R ไปยังโหนด M ดังนั้น R คือบรรพบุรุษของ M และ M เป็นผู้สืบทอดของ R ดังนั้นโหนดทั้งหมดในต้นไม้คือลูกหลานของรากของต้นไม้ในขณะที่รากเป็นบรรพบุรุษ ของโหนดทั้งหมด ความลึกของโหนด M ในต้นไม้คือความยาวของเส้นทางจากรากของต้นไม้ถึง M ความสูงของต้นไม้คือมากกว่าความลึกของโหนดที่ลึกที่สุดในต้นไม้โหนดทั้งหมดของความลึก d อยู่ที่ระดับ d ในต้นไม้ รูตเป็นโหนดเดียวที่ระดับ 0 และความลึกของมันคือ 0

รูปที่ 7.2.1

รูปที่ 7.2.1: ต้นไม้ไบนารี โหนด A คือรูท โหนด B และ C เป็นลูกของ A โหนด B และ D รวมกันเป็นทรีย่อย โหนด B มีลูกสองคน: ลูกซ้ายของมันคือต้นไม้ที่ว่างเปล่าและลูกขวาของมันคือ D. โหนด A, C, และ E เป็นบรรพบุรุษของ G. โหนด N, D, E และ F ประกอบขึ้นเป็นระดับที่ 2 ของต้นไม้; โหนด A อยู่ที่ระดับ 0 ขอบจาก A ถึง C ถึง E ถึง G สร้างเส้นทางที่มีความยาว 3 โหนด D, G, H และ I เป็นใบไม้ โหนด A, B, C, E และ F เป็นโหนดภายใน ความลึกของฉันคือ 3 ความสูงของต้นไม้นี้คือ 4


สำหรับสิ่งที่คุ้มค่านิยามที่ลิงก์นี้ถูกเปลี่ยนเป็น: "ความลึกของโหนด M ในต้นไม้คือความยาวของเส้นทางจากรากของต้นไม้ถึง M ความสูงของต้นไม้คือความลึกของ โหนดที่ลึกที่สุดในทรี "
kaya3
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.