算法之……二叉树的查找
来源:互联网 发布:北纬自动交易软件 编辑:程序博客网 时间:2024/06/06 18:21
由于自己的一时糊涂,将英语单词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;
}
#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;
}
- 算法之……二叉树的查找
- 算法之二叉查找树
- 数据结构查找算法之二叉查找树
- 二叉查找树之查找算法
- 查找算法 之 二叉查找树
- 查找算法之二叉查找树
- 二叉树的查找算法
- 排序算法系列之二叉查找树
- 排序算法之二叉查找树排序
- 二叉查找树之插入算法
- [算法系列之六]二叉查找树
- <数据结构与算法>之二叉查找树
- 基础查找算法之二叉查找算法
- 算法——查找之二叉查找树
- 详解二叉查找树算法的实现
- 二叉查找树的算法实现
- 详解二叉查找树算法的实现
- 二叉查找树的元素删除算法
- 为什么要创建索引呢
- Jquery 常用方法一览表(集合)
- 触发器定义
- 如何查看USB设备
- ms tts5.1
- 算法之……二叉树的查找
- Android核心模块及相关技术(宏观上了解Android)
- 25.211(840)——阅读笔记II
- DEFINE_GUID的作用
- DedeCMS 新建模型自定义联动类别调用及修改方法
- Ant工具 ant的安装与配置 ant作用
- 小用WinDbg之一
- 开始写博客---记录测试生活的点点滴滴(一)
- 真的不想行尸走肉