informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Artikel ini akan dimulai dengan konsep terkait pohon dan pohon biner untuk membantu kita mempelajari lebih lanjut tentang pohon biner.
🌈个人主页:Itu pelayannya
🌈C语言笔记专栏:Catatan bahasa C
🌈C++笔记专栏: Catatan C++
🌈初阶数据结构笔记专栏: Catatan struktur data dasar
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
Pohon adalah struktur data non-linier yang terdiri darin(n>=0)
Node terbatas membentuk suatu himpunan dengan hubungan hierarkis. Namun, pohon tersebut bernilai kecil dalam praktiknya, namun pohon biner memiliki nilai praktis yang lebih besar (alasan mengapa himpunan ini disebut pohon adalah karena akarnya menghadap ke atas dan daunnya menghadap ke atas. menghadap ke bawah. Kelihatannya seperti pohon)
M(M>0)
himpunan yang terputus-putusT1、T2、....、Tm
, yang masing-masing setnyaTi(1<=i<=m)
Ini adalah subpohon lain dengan struktur yang mirip dengan pohon. Node akar dari setiap subpohon mempunyai satu dan hanya satu pendahulu, dan dapat mempunyai 0 atau lebih penerus.Karena struktur pohon lebih kompleks daripada tabel linier, metode penyimpanannya lebih merepotkan. Hal ini diperlukan untuk menyimpan rentang nilai dan hubungan antar node.
Berikut beberapa metode berdasarkan pengetahuan sebelumnya:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
Tentu saja cara-cara di atas tidak terbatas, ada juga ekspresi orang tua, ekspresi anak, ekspresi orang tua anak, ekspresi saudara anak, dll.Di sini kita akan memahami secara singkat yang paling umum digunakanrepresentasi saudara laki-laki
Pohon biner adalah himpunan simpul yang berhingga. Himpunan ini mungkin mempunyai dua situasi:
Dua kesimpulan dapat diambil dari gambar tersebut:
Tidak ada simpul dengan derajat lebih besar dari 2 dalam pohon biner
Subpohon dari pohon biner dapat dibagi menjadi subpohon kiri dan kanan, dan urutannya tidak dapat dibalik, sehingga pohon biner adalah pohon terurut.
Melihat: Untuk pohon biner apa pun, ia terdiri dari situasi berikut (Situasi pohon kosong paling mudah untuk dilupakan)
Untuk meringkas secara singkat:
Setiap level pohon biner penuh sudah penuh
Jika tinggi pohon biner lengkap adalah n, maka level n-1 pertama sudah penuh, namun level terakhir mungkin belum penuh.Tapi itu harus terus menerus dari kiri ke kanan
Pohon biner lengkap adalah struktur data yang sangat efisien, dan pohon biner penuh adalah tipe khusus pohon biner lengkap.
Pohon biner penuh merupakan syarat perlu dan cukup untuk pohon biner lengkap
Ini adalah pohon biner biasa, yang tidak kontinu dari kiri ke kanan.
Pohon biner umumnya dapat disimpan dalam dua struktur, satu adalah struktur berurutan dan yang lainnya adalah struktur rantai.
Penyimpanan struktur berurutan adalah menggunakan array untuk menyimpan,Umumnya, array hanya cocok untuk merepresentasikan pohon biner lengkap. , karena jika pohon biner tidak penuh, maka akan terjadi pemborosan ruang. Pada kenyataannya, hanya heap yang akan menggunakan array untuk penyimpanan. Penyimpanan sekuensial pohon biner secara fisik adalah array dan secara logis merupakan pohon biner. Untuk menyelesaikan pertanyaan berikutnya, kita perlu menggunakan kombinasi array fisik dan pohon biner logis untuk menyelesaikan pertanyaan.
leftchild = parent * 2 + 1;
rightchild = paretn * 2 +2;
parent = (child - 1) / 2;
(Tidak membedakan anak kiri dan kanan)
Mengenai poin ketiga, berdasarkan alasan pribadi,leftchild
Subskrip dibagi menjadileftchild- 1
Dan1
,untukleftchild-1
untukparent
berlangganan dua kali, untuk(child - 1) / 2
Operator akan melakukannyaleftchild
Keluarkan sebagai1
Dibagi sebagian dengan 2, bilangan bulatnya adalah 0,leftchild -1
Sebagiannya dapat dilihat sebagaileftchild
,Danrightchild与leftchild相差1
,Karenarightchild = leftchild - 1
dan melalui atasleftchild - 1 ~= leftchild
, dapat disimpulkan bahwarightchild = leftchild(在进行/2运算,取整数情况下)
Struktur penyimpanan tertaut dari pohon biner mengacu pada penggunaan daftar tertaut untuk mewakili pohon biner, yaitu menggunakan rantai untuk menunjukkan hubungan logis elemen. Metode yang biasa dilakukan adalah setiap node dalam daftar tertaut terdiri dari tiga bidang, yaitu bidang data dan bidang penunjuk kiri dan kanan. Penunjuk kiri dan kanan digunakan untuk memberikan alamat penyimpanan titik tautan di mana anak kiri dan anak kanan dari node tersebut terletak masing-masing.Struktur rantai dibagi menjadi rantai biner dan rantai bercabang tiga. Saat ini, kita biasanya menggunakan rantai biner dalam penelitian kita. Nanti, ketika kita mempelajari struktur data tingkat tinggi seperti pohon merah-hitam, rantai bercabang tiga akan digunakan.
typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pParent; // 指向当前节点的双亲
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
};
Penyimpanan struktur berurutan disimpan melalui array.Umumnya, array hanya cocok untuk pohon biner lengkap. Pohon biner tidak lengkap tidak cocok untuk penyimpanan struktur array. . Namun kenyataannya, array hanya digunakan untuk penyimpanan ketika heap digunakan, dan sebagian besar disimpan melalui struktur rantai.
alasannya adalah:
Di atas adalah seluruh isi artikel ini. Terima kasih semuanya telah membaca! Berikut catatan Dian Xiaoer tentang struktur data dasar, semoga dapat membantu Anda dalam mempelajari struktur data dasar!