Computer >> Máy Tính >  >> Lập trình >> C ++

Cây nhị phân với triển khai mảng trong C ++


Cây nhị phân là một loại cây đặc biệt trong đó mỗi nút của cây có thể có nhiều nhất hai nút con. Các nút con này được gọi là nút con phải và nút con trái.

Một cây nhị phân đơn giản là -

Cây nhị phân với triển khai mảng trong C ++

Để đại diện cho cây, có hai cách,

  • biểu diễn nút động sử dụng danh sách được liên kết
  • Biểu diễn tuần tự sử dụng mảng.

Ở đây, chúng ta sẽ thảo luận về biểu diễn mảng của cây nhị phân. Đối với điều này, chúng ta cần đánh số các nút của BT. Việc đánh số này có thể bắt đầu từ 0 đến (n-1) hoặc từ 1 đến n.

Cho phép lấy vị trí của các nút và các nút cha và con của chúng trong mảng.

Khi chúng tôi sử dụng 0 trình tự dựa trên chỉ mục,

Giả sử nút cha là một chỉ mục p.

Sau đó, nút left_child ở chỉ mục (2 * p) + 1.

Nút right_child ở chỉ mục (2 * p) + 2.

Nút gốc ở chỉ số 0.

left_child ở chỉ mục 1.

Right_child ở chỉ mục 2.

Khi chúng tôi sử dụng 1 trình tự dựa trên chỉ mục,

Giả sử nút cha ở chỉ mục p,

Right_node ở index (2 * p).

Left_node ở chỉ mục (2 * p) +1 .

Nút gốc ở chỉ mục 1.

left_child ở chỉ mục 2.

Right_child ở chỉ mục 3.

Ví dụ

#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;
}

Đầu ra

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