您的位置:首页 > 其它

算法之……二叉树的查找

2010-06-24 22:06 162 查看
由于自己的一时糊涂,将英语单词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&¤tnode==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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: