Appearance
完全二叉树是一种特殊的二叉树,具有以下性质:
- 所有叶节点(叶子节点)都集中在树的最后一层或倒数第二层。
- 如果节点有右子节点,则必定有左子节点。
- 对于任意节点的编号 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);
}