由于自己的一时糊涂,将英语单词left和right弄反了,给你们的阅读带来很多不便,所以还是尽情谅解,由于是个人的代码,新手,所以有很多肯能你们认为不对的地方,还是请大家多提意见!!
C语言:
Codee#11760
#include <stdio.h>
#include <malloc.h>
#define MAX_1 10
struct node
{
int weight;
int * parent;
int * left;
int * right;
};
typedef struct node Graph;
typedef Graph * Edge;
Edge Create_tree( Edge head , Edge New) //建立
{
Edge pointer;
Edge currentnode;
pointer = head;
if( pointer == NULL)
return New;
else
{
while( pointer != NULL)
{
currentnode = pointer;
if( New -> weight > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( New -> weight > currentnode -> weight)
{
currentnode -> left = New;
New -> parent = currentnode;
}
else
{
currentnode -> right = New;
New -> parent = currentnode;
}
}
return head;
}
void print( Edge head) //print打印
{
Edge currentnode;
Edge pointer;
pointer = head;
if( pointer != NULL)
{
printf( "%d " , pointer -> weight);
print( pointer -> left);
print( pointer -> right);
}
}
void Insert_tree( Edge head) //insert a number插入
{
Edge New;
Edge pointer;
Edge currentnode;
pointer = head;
New =( Edge) malloc( sizeof( Graph));
New -> left = NULL;
New -> right = NULL;
New -> parent = NULL;
pointer = head;
printf( "please input the number you want to insert:");
scanf( "%d" , & New -> weight);
while( pointer != NULL)
{
currentnode = pointer;
if( New -> weight > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( New -> weight > currentnode -> weight)
{
currentnode -> left = New;
New -> parent = currentnode;
}
else
{
currentnode -> right = New;
New -> parent = currentnode;
}
}
void Min_tree( Edge head) //最小数的结点
{
Edge pointer;
Edge currentnode;
pointer = head;
currentnode = pointer;
while( pointer != NULL)
{
currentnode = pointer;
pointer = pointer -> right;
}
printf( "%d" , currentnode -> weight);
}
void Successor_tree( Edge head , int key) //后继
{
Edge pointer;
Edge currentnode;
Edge innode;
pointer = head;
while( pointer != NULL)
{
if( pointer -> weight == key)
{
currentnode = pointer;
break;
}
else
if( key > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( currentnode -> left != NULL)
{
Min_tree( currentnode -> left);
printf( " /n ");
}
else
{
innode = currentnode -> parent;
while( innode != NULL && currentnode == innode -> left)
{
currentnode = innode;
innode = currentnode -> parent;
}
}
printf( "%d" , pointer -> weight);
}
int main()
{
Edge New;
Edge head = NULL;
int key;
int n , i;
scanf( "%d" , &n);
for( i = 0; i <n; i ++)
{
New =( Edge) malloc( sizeof( Graph));
New -> left = NULL;
New -> right = NULL;
New -> parent = NULL;
scanf( "%d" , & New -> weight);
head = Create_tree( head , New);
}
print( head); //打印
printf( " /n ");
Insert_tree( head); //插入
print( head); //打印
printf( " /n ");
Min_tree( head);
printf( " /n ");
printf( "please input the number you want to Successor:");
scanf( "%d" , & key);
Successor_tree( head , key);
printf( " /n ");
return 0;
}
#include <malloc.h>
#define MAX_1 10
struct node
{
int weight;
int * parent;
int * left;
int * right;
};
typedef struct node Graph;
typedef Graph * Edge;
Edge Create_tree( Edge head , Edge New) //建立
{
Edge pointer;
Edge currentnode;
pointer = head;
if( pointer == NULL)
return New;
else
{
while( pointer != NULL)
{
currentnode = pointer;
if( New -> weight > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( New -> weight > currentnode -> weight)
{
currentnode -> left = New;
New -> parent = currentnode;
}
else
{
currentnode -> right = New;
New -> parent = currentnode;
}
}
return head;
}
void print( Edge head) //print打印
{
Edge currentnode;
Edge pointer;
pointer = head;
if( pointer != NULL)
{
printf( "%d " , pointer -> weight);
print( pointer -> left);
print( pointer -> right);
}
}
void Insert_tree( Edge head) //insert a number插入
{
Edge New;
Edge pointer;
Edge currentnode;
pointer = head;
New =( Edge) malloc( sizeof( Graph));
New -> left = NULL;
New -> right = NULL;
New -> parent = NULL;
pointer = head;
printf( "please input the number you want to insert:");
scanf( "%d" , & New -> weight);
while( pointer != NULL)
{
currentnode = pointer;
if( New -> weight > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( New -> weight > currentnode -> weight)
{
currentnode -> left = New;
New -> parent = currentnode;
}
else
{
currentnode -> right = New;
New -> parent = currentnode;
}
}
void Min_tree( Edge head) //最小数的结点
{
Edge pointer;
Edge currentnode;
pointer = head;
currentnode = pointer;
while( pointer != NULL)
{
currentnode = pointer;
pointer = pointer -> right;
}
printf( "%d" , currentnode -> weight);
}
void Successor_tree( Edge head , int key) //后继
{
Edge pointer;
Edge currentnode;
Edge innode;
pointer = head;
while( pointer != NULL)
{
if( pointer -> weight == key)
{
currentnode = pointer;
break;
}
else
if( key > pointer -> weight)
{
pointer = pointer -> left;
}
else
pointer = pointer -> right;
}
if( currentnode -> left != NULL)
{
Min_tree( currentnode -> left);
printf( " /n ");
}
else
{
innode = currentnode -> parent;
while( innode != NULL && currentnode == innode -> left)
{
currentnode = innode;
innode = currentnode -> parent;
}
}
printf( "%d" , pointer -> weight);
}
int main()
{
Edge New;
Edge head = NULL;
int key;
int n , i;
scanf( "%d" , &n);
for( i = 0; i <n; i ++)
{
New =( Edge) malloc( sizeof( Graph));
New -> left = NULL;
New -> right = NULL;
New -> parent = NULL;
scanf( "%d" , & New -> weight);
head = Create_tree( head , New);
}
print( head); //打印
printf( " /n ");
Insert_tree( head); //插入
print( head); //打印
printf( " /n ");
Min_tree( head);
printf( " /n ");
printf( "please input the number you want to Successor:");
scanf( "%d" , & key);
Successor_tree( head , key);
printf( " /n ");
return 0;
}