int main(int argc, char *argv[]) { bitree root; int arr[20] = { 29, 23, 45, 16, 18, 17, 34, 38, 24, 19, 0 }; root = create_bitree(arr, ARRY_SIZE(arr)); // 构建顺序二叉树遇到 0 结束 printf("/******************************************/\n"); inorder_bitree(root, dump_node); // 中序遍历二叉树 printf("/******************************************/\n"); destroy_bitree(root); // 中序遍历释放内存 return 0; }
bitree create_bitree(int *arr, int size) { int data = 0; bitree root = NULL; node_t *insert_des = NULL; node_t *node = NULL; int i = 0; if((arr == NULL) || (size <= 0)) { return NULL; } for (i = 0; i < size; ++i) { if ((data = arr[i]) == 0) { break; } if (root == NULL) { if ((root = init_node(data)) == NULL) { break; } continue; } insert_des = search_bitree(root, data); if (insert_des->data != data) { printf("parent node data : %d\t", insert_des->data); if ((node = init_node(data)) == NULL) { destroy_bitree(root); return NULL; } if (insert_des->data > data) { printf("left\n"); insert_des->l_child = node; } else { printf("right\n"); insert_des->r_child = node; } } } return root; }
int main(void) { Node *n8 = create_node(1000,NULL,NULL); Node *n1 = create_node(55,NULL,n8); Node *n2 = create_node(100,NULL,NULL); Node *n3 = create_node(1,n1,n2); Node *n4 = create_node(2,NULL,NULL); Node *n5 = create_node(3,NULL,NULL); Node *n6 = create_node(4,n4,n5); Node *n7 = create_node(5,n3,n6); root r = init_bitree(n7); pre_search(r); printf("\n"); mid_search(r); printf("\n"); last_search(r); printf("\n"); destroy_bitree(r); return 0; }