Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////
- // LIBRARY
- ///////////////////////////
- typedef int TInfo;
- typedef struct TTreeNode {
- TInfo info;
- struct TTreeNode *left;
- struct TTreeNode *right;
- } TTreeNode;
- typedef TTreeNode *TBinaryTree;
- void tree_destroy(TBinaryTree *ptree) {
- if (*ptree == NULL)
- return;
- tree_destroy(&(*ptree)->left);
- tree_destroy(&(*ptree)->right);
- tree_node_destroy(*ptree);
- *ptree=NULL;
- }
- TTreeNode *tree_node_create(TInfo info, TTreeNode *left, TTreeNode *right) {
- TTreeNode *node=(TTreeNode *)malloc(sizeof(TTreeNode));
- assert(node!=NULL);
- node->info=info;
- node->left=left;
- node->right=right;
- return node;
- }
- void tree_node_destroy(TTreeNode *node) {
- assert(node!=NULL);
- free(node);
- }
- TBinaryTree tree_create(void) {
- return NULL;
- }
- void tree_destroy(TBinaryTree *ptree) {
- if (*ptree == NULL)
- return;
- tree_destroy(&(*ptree)->left);
- tree_destroy(&(*ptree)->right);
- tree_node_destroy(*ptree);
- *ptree=NULL;
- }
- TBinaryTree tree_insert(TBinaryTree tree, TInfo x) {
- if (tree==NULL)
- return tree_node_create(x, NULL, NULL);
- else if (less(x, tree->info)) {
- tree->left=tree_insert(tree->left, x);
- } else {
- tree->right=tree_insert(tree->right, x);
- }
- return tree;
- }
- TBinaryTree tree_read(int n) {
- assert(n>=0);
- if (n==0)
- return tree_create();
- TBinaryTree t=tree_read(n-1);
- TInfo x;
- scanf("%d", &x);
- return tree_insert(t, x);
- }
- void tree_print(TBinaryTree tree) {
- if (tree==NULL)
- return;
- tree_print(tree->left);
- printf("%d ", tree->info);
- tree_print(tree->right);
- }
- //////////////////////////
- // MAIN.C
- //////////////////////////
- int main(int argc, char** argv) {
- TBinaryTree tree=tree_create();
- int n;
- printf("Elements number: ");
- scanf("%d",&n);
- printf("Insert tree items: ");
- tree=tree_read(n);
- int min;
- min=tree_delete_min(&tree);
- tree_print(tree);
- }
- TInfo tree_delete_min(TBinaryTree *tree){
- int min;
- if((*tree)->left==NULL){
- min=(*tree)->info;
- tree_node_destroy(*tree);
- return min;
- }
- else min=tree_delete_min(&(*tree)->left);
- return min;
- }
Advertisement
Add Comment
Please, Sign In to add comment