Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Binary Tree พร้อมการนำ Array ไปใช้ใน C ++


ไบนารีทรีเป็นชนิดพิเศษของทรี ซึ่งแต่ละโหนดของทรีสามารถมีโหนดรองได้ไม่เกินสองโหนด โหนดย่อยเหล่านี้เรียกว่าลูกด้านขวาและลูกด้านซ้าย

ต้นไม้ไบนารีอย่างง่ายคือ −

Binary Tree พร้อมการนำ Array ไปใช้ใน C ++

สำหรับเป็นตัวแทนของต้นไม้ มีสองวิธี

  • การแสดงโหนดไดนามิกซึ่งใช้รายการที่เชื่อมโยง
  • การแสดงตามลำดับซึ่งใช้อาร์เรย์

ในที่นี้ เราจะพูดถึงการแทนค่าอาร์เรย์ของไบนารีทรี สำหรับสิ่งนี้ เราจำเป็นต้องนับจำนวนโหนดของ BT การนับนี้สามารถเริ่มต้นจาก 0 ถึง (n-1) หรือจาก 1 ถึง n.

ให้หาตำแหน่งของโหนดและโหนดหลักและโหนดย่อยในอาร์เรย์

เมื่อเราใช้ 0 ลำดับตามดัชนี

สมมติว่าโหนดหลักเป็นดัชนี p.

จากนั้นโหนด left_child อยู่ที่ดัชนี (2*p)+ 1

โหนด right_child อยู่ที่ดัชนี (2*p) + 2

โหนดรูทอยู่ที่ดัชนี 0

left_child อยู่ที่ดัชนี 1

Right_child อยู่ที่ดัชนี 2

เมื่อเราใช้ การเรียงลำดับตามดัชนี 1 รายการ

สมมติว่าโหนดหลักอยู่ที่ ดัชนี p

Right_node อยู่ที่ ดัชนี (2*p)

Left_node อยู่ที่ ดัชนี (2*p)+1 .

โหนดรูทอยู่ที่ดัชนี 1

left_child อยู่ที่ดัชนี 2

Right_child อยู่ที่ดัชนี 3

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
char tree[10];
int rootnode(char key){
   if(tree[0] != '\0')
      cout<<"Tree already had root";
   else
      tree[0] = key;
   return 0;
}
int leftchild(char key, int parent){
   if(tree[parent] == '\0')
      cout <<"\nCan't set child at"<<(parent * 2) + 1<<" , no parent found";
   else
      tree[(parent * 2) + 1] = key;
   return 0;
}
int rightchild(char key, int parent){
   if(tree[parent] == '\0')
      cout<<"\nCan't set child at"<<(parent * 2) + 2<<" , no parent found";
   else
      tree[(parent * 2) + 2] = key;
   return 0;
}
int traversetree(){
   cout << "\n";
   for(int i = 0; i < 10; i++){
      if(tree[i] != '\0')
         cout<<tree[i];
      else
         cout<<"-";
   }
   return 0;
}
int main(){
   rootnode('A');
   rightchild('C', 2);
   leftchild('D', 0);
   rightchild('E', 1);
   rightchild('F', 2);
   traversetree();
   return 0;
}

ผลลัพธ์

Can't set child at6 , no parent found
Can't set child at6 , no parent found
AD--E-----