Apa perbedaan antara kedalaman dan tinggi pohon?

262

Ini adalah pertanyaan sederhana dari teori algoritma.
Perbedaan di antara mereka adalah bahwa dalam satu kasus Anda menghitung jumlah node dan jumlah tepi lainnya pada jalur terpendek antara root dan simpul beton.
Yang mana?

Gabriel Ščerbák
sumber
78
Tip: untuk menghindari kebingungan antar terminologi: 1. Tinggi: Bayangkan mengukur tinggi badan seseorang, kita melakukannya dari ujung kaki hingga ujung kepala (daun ke akar). 2. Kedalaman: Bayangkan mengukur kedalaman laut, kita melakukannya dari permukaan bumi ke dasar samudra (root to leaf).
Yesh
@ Ya, Ini analogi yang bagus.
Karakter Khusus
1
Untuk menambah analogi @Yesh yang sangat baik: untuk beberapa simpul batin di tengah pohon, kedalamannya adalah berapa banyak level di bawah simpul akar, dan tingginya adalah bagaimana levelnya berada di atas simpul anak paling bawah.
Thomas Nguyen

Jawaban:

664

Saya belajar bahwa kedalaman dan tinggi adalah properti sebuah simpul :

  • The mendalam dari sebuah node adalah jumlah tepi dari node ke pohon simpul akar.
    Node root akan memiliki kedalaman 0.

  • The ketinggian dari sebuah node adalah jumlah sisi pada jalan terpanjang dari node ke daun.
    Node daun akan memiliki tinggi 0.

Properti pohon :

  • The tinggi pohon akan ketinggian simpul akar,
    atau ekuivalen, kedalaman simpul yang paling dalam.

  • The diameter (atau lebar ) dari pohon adalah jumlah node pada jalur terpanjang antara dua node daun. Pohon di bawah ini memiliki diameter 6 node.

Sebuah pohon, dengan tinggi dan kedalaman setiap simpul

Daniel AA Pelsmaeker
sumber
21
+1 akan menambahkan kutipan dengan konten yang sama dari sini: en.wikipedia.org/wiki/Tree_%28data_structure%29
Péter Török
2
apakah itu berarti ketinggian == max kedalaman
roottraveller
6
@rkm_Hodor: Ya, ketinggian pohon selalu sama dengan kedalaman simpul terdalam.
Daniel AA Pelsmaeker
1
Bisakah Anda mengutip sumber untuk klaim Anda bahwa diameter pohon menghitung node bukan tepi? Ini bertentangan dengan definisi umum dari diameter grafik (lihat misalnya en.wikipedia.org/wiki/Distance_(graph_theory) ) yang meminta jalur terpanjang.
j_random_hacker
1
@ j_random_hacker Ini masalah definisi, pilih yang paling berguna bagi Anda. Untuk mendapatkan dari jumlah simpul ke jumlah tepi, cukup kurangi 1. Saya lebih suka menghitung jumlah simpul, karena ini menghasilkan grafik dengan hanya satu simpul memiliki lebar 1, dan grafik kosong memiliki lebar 0. mathworld. wolfram.com/GraphDiameter.html
Daniel AA Pelsmaeker
44

tinggi dan kedalaman pohon sama ...

tetapi ketinggian dan kedalaman suatu simpul tidak sama karena ...

tingginya dihitung dengan melintasi dari simpul yang diberikan ke daun yang paling dalam.

kedalaman dihitung dari traversal dari root ke node yang diberikan .....

Praveen_Shukla
sumber
4
"tinggi dihitung dengan melintasi dari daun ke simpul yang diberikan" itu tidak benar, daun harus menjadi salah satu yang paling dalam di antara semua daun dari simpul yang diberikan.
mightyWOZ
14

Menurut Cormen et al. Pengantar Algoritma (Lampiran B.5.3), kedalaman sebuah simpul X di pohon T didefinisikan sebagai panjang jalur sederhana (jumlah tepi) dari simpul akar T ke X. Ketinggian simpul Y adalah jumlah tepi pada jalur sederhana ke bawah terpanjang dari Y ke daun. Ketinggian pohon didefinisikan sebagai ketinggian simpul akarnya.

Perhatikan bahwa jalur sederhana adalah jalur tanpa simpul berulang.

Ketinggian pohon sama dengan kedalaman maksimal pohon . Kedalaman suatu simpul dan ketinggian suatu simpul tidak harus sama. Lihat Gambar B.6 dari Edisi 3 Cormen et al. untuk ilustrasi konsep-konsep ini.

Saya kadang-kadang melihat masalah meminta seseorang untuk menghitung simpul (simpul) bukan tepi, jadi minta klarifikasi jika Anda tidak yakin Anda harus menghitung simpul atau tepi selama ujian atau wawancara kerja.

gletser
sumber
Apakah ada perbedaan dalam menghitung node dan edge. Tampaknya keduanya akan memberikan hasil yang sama. Perbaiki saya jika saya salah.
VINOTH ENERGETIC
@ jdhao bagaimana kedalaman root menjadi 2? Ini bisa 0 (jika edge dianggap) atau 1 (jika node dianggap).
neowulf33
@ neowulf33, ya, saya sangat salah. Kedalaman node root harus 0. Saya akan menghapus komentar saya agar tidak membingungkan orang.
jdhao
2

Jawaban Sederhana:
Kedalaman:
1. Pohon : Jumlah tepi / busur dari simpul akar ke simpul daun pohon disebut sebagai Kedalaman Pohon.
2. Node : Jumlah tepi / busur dari simpul akar ke simpul yang disebut sebagai Kedalaman simpul itu.

Akshay Sahu
sumber
2

Cara lain untuk memahami konsep tersebut adalah sebagai berikut: Kedalaman: Gambar garis horizontal pada posisi root dan perlakukan garis ini sebagai ground. Jadi kedalaman root adalah 0, dan semua anak-anaknya tumbuh ke bawah sehingga setiap level node memiliki kedalaman saat ini + 1.

Tinggi: Garis horizontal yang sama tetapi kali ini posisi tanah adalah simpul eksternal, yang merupakan daun pohon dan dihitung ke atas.

Wilson Zhang
sumber
2

Saya ingin membuat posting ini karena saya seorang mahasiswa CS sarjana dan semakin banyak kami menggunakan OpenDSA dan buku teks sumber terbuka lainnya. Sepertinya dari jawaban berperingkat teratas bahwa cara tinggi dan kedalaman yang diajarkan telah berubah dari satu generasi ke generasi berikutnya, dan saya memposting ini sehingga semua orang sadar bahwa perbedaan ini sekarang ada dan mudah-mudahan tidak akan menyebabkan bug dalam program! Terima kasih.

Dari buku OpenDSA Data Structures & Algos :

Jika n 1 , n 2 , ..., n k adalah urutan node di pohon sedemikian rupa sehingga n i adalah induk dari n i +1 untuk 1 <= i <k, maka urutan ini disebut jalur dari n 1 hingga n k . Panjang jalan adalah k − 1. Jika ada jalur dari simpul R ke simpul M, maka R adalah leluhur M, dan M adalah turunan dari R. Jadi, semua simpul di pohon adalah keturunan dari akar pohon, sedangkan akar adalah leluhur dari semua node. Kedalaman simpul M di pohon adalah panjang jalur dari akar pohon ke M. Ketinggian pohon adalah satu lebih dari kedalaman simpul terdalam di pohon.Semua node kedalaman d berada di level d di pohon. Root adalah satu-satunya simpul di level 0, dan kedalamannya adalah 0.

Gambar 7.2.1

Gambar 7.2.1: Pohon biner. Node A adalah root. Node B dan C adalah anak-anak A. Node B dan D bersama-sama membentuk subtree. Node B memiliki dua anak: anak kirinya adalah pohon kosong dan anak kanannya adalah D. Node A, C, dan E adalah leluhur dari G. Node D, E, dan F membentuk tingkat 2 dari pohon; simpul A berada di level 0. Ujung-ujungnya dari A ke C ke E ke G membentuk lintasan panjang 3. Node D, G, H, dan I adalah daun. Node A, B, C, E, dan F adalah node internal. Kedalaman I adalah 3. Tinggi pohon ini adalah 4.

pohon ash
sumber
Untuk apa nilainya, definisi pada tautan ini telah diubah menjadi: "Kedalaman simpul M di pohon adalah panjang jalan dari akar pohon ke M. Tinggi pohon adalah kedalaman simpul terdalam di pohon. "
kaya3