/* * 打印"二叉树" * * tree -- 二叉树的节点 * key -- 节点的键值 * direction -- 0,表示该节点是根节点; * -1,表示该节点是它的父结点的左孩子; * 1,表示该节点是它的父结点的右孩子。 */ void print_bstree(BSTree tree, Type key, int direction) { if(tree != NULL) { if(direction==0) // tree是根节点 printf("%2d is root\n", tree->key); else // tree是分支节点 printf("%2d is %2d's %6s child\n", tree->key, key, direction==1?"right" : "left"); print_bstree(tree->left, tree->key, -1); print_bstree(tree->right,tree->key, 1); } }
void main() { int i, ilen; BSTree root=NULL; printf("== 依次添加: "); ilen = TBL_SIZE(arr); for(i=0; i<ilen; i++) { printf("%d ", arr[i]); root = insert_bstree(root, arr[i]); } printf("\n== 前序遍历: "); preorder_bstree(root); printf("\n== 中序遍历: "); inorder_bstree(root); printf("\n== 后序遍历: "); postorder_bstree(root); printf("\n"); printf("== 最小值: %d\n", bstree_minimum(root)->key); printf("== 最大值: %d\n", bstree_maximum(root)->key); printf("== 树的详细信息: \n"); print_bstree(root, root->key, 0); printf("\n== 删除根节点: %d", arr[3]); root = delete_bstree(root, arr[3]); printf("\n== 中序遍历: "); inorder_bstree(root); printf("\n"); // 销毁二叉树 destroy_bstree(root); }