hi all
any one plz can help me with my prog.
i'm trying to create Searching(), Insert(), Delete() and View() functions for ADT Tree.
i got the main() function as an assignment, and i need to create the above functions for it i got blue trying!!!
plz some help, guys
here is my code:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int Boolean;
typedef char KeyType[20];
typedef struct tree_entry
{
KeyType name;
int phone;
}TreeEntry;
typedef struct treenode
{
TreeEntry entry;
struct treenode *left;
struct treenode *right;
}TreeNode;
void CreateTree(TreeNode **root)
{
*root = NULL;
}
TreeNode *MakeTreeNode(TreeEntry x)
{
TreeNode *p;
p = (TreeNode *) malloc(sizeof(TreeNode));
if(!p)
printf("Failed to allocate space for tree node");
else
{
p->left = NULL;
p->right = NULL;
strcpy(p->entry.name, x.name);
p->entry.phone = x.phone;
}
return p;
}
TreeNode *InsertNode (TreeNode *root, TreeNode *newnode)
{
if (root == NULL) {
root = newnode;
root->left = root->right = NULL;
}
else if (newnode->entry < root->entry)
root->left = InsertNode(root->left, newnode);
else
root->right = InsertNode(root->right, newnode);
return root;
}
void GetData(TreeNode **root)
{
TreeEntry data;
TreeNode *newnode;
int i, n;
printf("Enter how many records do you want to key in: ");
scanf("%d", &n);
for(i=1;i<=n;i++)
{
printf("\nEnter name and telephone number for record # %d: ", i);
scanf("%s %d", data.name, &data.phone);
newnode = MakeTreeNode(data);
*root = InsertNode(*root,newnode);//!!!!!!!!!!!!!!!
}
}
TreeNode * TreeSearch(TreeNode *root, KeyType target)
{
if(root)
{
if(target < root->entry.name)
root = TreeSearch(root->left,target);
else if(target > root->entry.name)
root = TreeSearch(root->right,target);
}
return root;
}
Boolean TreeEmpty(TreeNode *root)
{
return root == NULL;
}
void DeleteNodeTree(TreeNode **p)
{
TreeNode *r,*q;
r = *p;
if(r == NULL)
printf("Attempt to delete nonexistent node from binary tree");
else if(r->right == NULL)
{
*p = r->left;
free(r);
}
else if(r->left == NULL)
{
*p = r->right;
free(r);
}
else
{
for(q = r->right; q->left; q = q->left)
{
q->left = r->left;
*p = r->right;
free(r);
}
}
}
void Inorder(TreeNode *root)
{
if(root)
{
Inorder(root->left);
printf("%c", root->entry.name);
Inorder(root->right);
}
}
void PrintEntry(TreeEntry *entry)
{
printf("%s\n%d",entry->name,entry->phone);
}
void Menu(void)
{
printf("\nSelect your choice:\n");
printf("1. Searching for data\n");
printf("2. Insert new data\n");
printf("3. Delete a data\n");
printf("4. View phone list\n");
printf("5. Quit\n");
printf("Choice: ");
}
void main()
{
TreeNode *root, *searchnode=NULL, *deletenode=NULL, *newnode, tnode;
int choice, cont=1;
KeyType nama;
TreeEntry newentry;
CreateTree(&root);
GetData(&root);
while(cont==1)
{
Menu();
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("Enter your friend's name: ");
fflush(stdin);
gets(nama);
searchnode=TreeSearch(root,nama);
if(searchnode!=NULL)
PrintEntry(&searchnode->entry);
else
printf("Not found.\n");
break;
case 2:
printf("Enter your friend's name: ");
scanf("%s",newentry.name);
printf("Enter your friend's phone number: ");
scanf("%d", &newentry.phone);
newnode=MakeTreeNode(newentry);
root=InsertNode(root,newnode);
break;
case 3:
printf("Enter your friend's name: ");
scanf("%s", nama);
deletenode=TreeSearch(root,nama);
if(!deletenode)
printf("Entry does not exist in the phonebook.\n");
else
{
printf("Are you sure want to delete %s entry in thephonebook? Yes=1, No=0: ",deletenode->entry.name);
fflush(stdin);
if(getchar()=='1')
{
//DeleteKeyTree(&root,&tnode,nama);
DeleteNodeTree(&root);
printf("%s is already deleted from the phonebook.\n", nama);
}
else
printf("%s is not deleted from the phonebook.\n", nama);
}
break;
case 4:
printf("My telephone book\n");
Inorder(root);
break;
case 5:
cont=0;
break;
default:
printf("Invalid choice\n");
}
}
}
my problem is to create MakeTreeNode(), InsertNode(), TreeSearch() and DeleteNodeTree() functions for this main() function and structures mentioned in the code.
i'm beginer in tree prog. and need ur help, guys
thnx