算法之……二叉树的查找
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;
}
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;
}
相关文章推荐
- 算法-二叉树查找排序
- 算法学习----二叉树的查找、 删除、插入、遍历
- 几张动态图弄懂递归,二叉树,二分查找简短算法
- 设计算法查找二叉树的两个结点最近公共祖先(LCA)
- 算法3.8查找二叉树
- 算法基础6:二叉树查找
- 数据查找算法---顺序查找、二分法查找、二叉树查找、hash查找
- 微软算法100题04 二叉树中查找和为某值的所有路径
- 算法:二叉排序树的删除节点策略及其图形化(二叉树查找)
- 数据算法之二叉树查找(BinaryTreeL Search)的Java实现
- 算法---二叉树的建立,查找,删除
- 二叉树查找简单算法
- javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
- 【算法与数据结构】查找二叉树的实现
- 浅谈算法和数据结构: 九 平衡查找树之红黑树
- 字符串算法——旋转数组中查找目标值(Search in Rotated Sorted Array)
- 数据结构和算法学习(8)-二叉树
- [转载]二叉树查找
- [算法与数据结构] - No.7 二叉树建立及其前序、中序、后序遍历
- 二叉树 各种遍历算法