Skip to content
On this page

完全二叉树


标签:算法/tree  

完全二叉树是一种特殊的二叉树,具有以下性质:

  1. 所有叶节点(叶子节点)都集中在树的最后一层或倒数第二层。
  2. 如果节点有右子节点,则必定有左子节点。
  3. 对于任意节点的编号 i,如果节点存在,编号为 i 的节点的左子节点的编号为 2i,右子节点的编号为 2i+1。

构建完全二叉树:

c
// 创建新节点
Node* createNode(int data) {
  Node* newNode = (Node*)malloc(sizeof(Node));
  if (newNode == NULL) {
    printf("内存分配失败\n");
    exit(1);
  }
  newNode->data = data;
  newNode->left = NULL;
  newNode->right = NULL;
  return newNode;
}

// 创建完全二叉树
Node* createCompleteBinaryTree(int arr[], int size, int index) {
  if (index >= size) {
    return NULL;
  }

  Node* newNode = createNode(arr[index]);

  newNode->left = createCompleteBinaryTree(arr, size, 2 * index + 1);
  newNode->right = createCompleteBinaryTree(arr, size, 2 * index + 2);

  return newNode;
}

// 主函数
int main() {
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int size = sizeof(arr) / sizeof(arr[0]);

  Node* root = createCompleteBinaryTree(arr, size, 0);
}

Last updated: