Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  tree
Language: C/C++
Code:
#include <stdio.h>
#include <stdlib.h>

struct tree {
     int key;
     int data;
     struct tree *left, *right;
};



int
find (int key, struct tree *head)
{
     if (head == NULL) {
          printf("no find\n");
          return (0);
     }
     if (key == head->key)
          return (head->data);
     else if (key < head->key)
          return (find(key, head->left));
     else if (key > head->key)
          return (find(key, head->right));
}


void
insert (struct tree **head, struct tree *neew)
{
     if (*head == NULL)
          *head = neew;
     else if ((*head)->key == neew->key)
          printf("err dub\n");
     else if ((*head)->key > neew->key)
          insert(&((*head)->left), neew);
     else if ((*head)->key < neew->key)
          insert(&((*head)->right), neew);

}



struct tree *
add (int key, int data, struct tree *head)
{
     struct tree *neew;
     neew = (struct tree *) malloc(sizeof(struct tree));
     neew->data = data;
     neew->key = key;
     neew->left = NULL;
     neew->right = NULL;
     insert(&head, neew);
     return (head);
}


struct tree **
lllleft (struct tree **head)
{
     if ((*head)->left == NULL)
          if ((*head)->right == NULL)
               return (head);
          else
               return (lllleft (&(*head)->right));
     else
          return (lllleft (&(*head)->left));
}



void
dell (struct tree **head)
{
     printf("del %d\n", (*head)->key);
     struct tree *p, **l;
     if ((*head)->left == NULL) {
          p = *head;
          *head = p->right;
          free(p);
     } else if ((*head)->right == NULL) {
          p = *head;
          *head = p->right;
          free(p);
     } else {
          l = lllleft(&((*head)->right));
          /*     printf("left %d\n", (*l)->key);          */
          p = *head;
          *head = *l;
          *l = NULL;
          (*head)->left = p->left;
          (*head)->right = p->right;
          /*     printf("key= %d, data= %d\n", (*head)->key, (*head)->data);
          if ((*head)->left == NULL)
               printf("no left");
          else
               printf("left %d\n", ((*head)->left)->key);
          if ((*head)->right == NULL)
               printf("no right");
          else
               printf("right %d\n", ((*head)->right)->key);     */

          free(p);
     }

}

void
rmtree (int key, struct tree **head)
{
     /*     printf("finding %d\n", (*head)->key);     */
     if (head == NULL)
          printf("no %d\n", key);
     else if ((*head)->key == key) {
          /*     printf("KEY= %d\n", (*head)->key);     */
          dell(head);
     }
     else if ((*head)->key > key)
          rmtree(key, &((*head)->left));
     else if ((*head)->key < key)
          rmtree(key, &((*head)->right));
}












void
tree1 (struct tree *head)
{
     if (head != NULL) {
          printf("key= %d ; data= %d \n", head->key, head->data);
          tree1(head->left);
          tree1(head->right);
     }
}



void
tree2 (struct tree *head)
{
     if (head != NULL) {
          tree2(head->left);
         printf("key= %d ; data= %d \n", head->key, head->data);
          tree2(head->right);
     }
}



void
tree3 (struct tree *head)
{
    if (head != NULL) {
          tree3(head->left);
          tree3(head->right);
         printf("key= %d ; data= %d \n", head->key, head->data);
     }
}





void main()
{
     int com, key, data;
     struct tree *head = NULL;
     while (com != -1) 
     {     
          scanf("%d", &com);
          if (com == 0) {
               printf("1-reOrder\n2-inOrder\n3-postOrder\n");
               scanf("%d", &com);
               if (com == 1)
                    tree1(head);
               else if (com == 2)
                    tree2(head);
               else if (com == 3)
                    tree3(head);
          }
          else if (com == 1) {
               printf("key=");
               scanf("%d", &key);
               printf("data=");
               scanf("%d", &data);
               head = add(key, data, head);
          }
          else if (com == 2) {
               printf("key=");
               scanf("%d", &key);
               printf("data(%d) = %d\n", key, find(key, head));
               
          }
          else if (com == 3) {
               printf("key=");
               scanf("%d", &key);
               rmtree(key, &head);
          }
     }
     printf("end\n");
}
Comments: