C++ 中带有数组的二叉树实现

c++server side programmingprogramming

二叉树是一种特殊类型的树,其中树的每个节点最多可以有两个子节点。这些子节点称为右子节点和左子节点。

一个简单的二叉树是 −

表示树有两种方式,

  • 使用链接列表的动态节点表示
  • 使用数组的顺序表示。

在这里,我们将讨论二叉树的数组表示。为此,我们需要对 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-----

相关文章