基本操作
1、清空整棵树。
2、查找元素。
3、查找最大值和最小值。
4、插入。
5、删除。
插入和删除明天再做
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
//
//定义avl树结构
struct NODE;
typedef NODE* treeNode;
typedef NODE* position;
struct NODE
{
elemtype X;
treeNode left;
treeNode right;
int height;
};
//
static int Height(position p)
{
if(p==NULL)
return -1;
else
return p->height;
}
//清空整棵树
treeNode makeEmpty(treeNode node)
{
if (node==NULL)
{
return NULL;
}
else
{
return makeEmpty(node->left);
return makeEmpty(node->right);
free(node);
}
}
//查找某一个特定元素
position find(elemtype x,treeNode node)
{
if (node==NULL)
{
return NULL;
}
if(x<node->X)
return find(x,node->left);
else if(x>node->X)
return find(x,node->right);
return node;
}
//获取树中最小元素,都需要考虑链表为空的情况
position findMin(treeNode node)
{
if (node==NULL)
{
return NULL;
}
if (node->left!=NULL)
{
return findMin(node->left);
}
return node;
}
//获取树中最大的元素
position findMax(treeNode node)
{
if (node==NULL)
{
return NULL;
}
if (node->right!=NULL)
{
return findMax(node->right);
}
return node;
}
//插入
position insert(elemtype x,treeNode T)
{
//初始为空,或者递归到底部
if(T==NULL) {
treeNode t=(treeNode)malloc(sizeof(NODE));
if(t==NULL)
printf("\n内存分配失败");
t->height=0;
t->X=x;
t->left=t->right=NULL;
}
if(x<T->X) {
T=insert(x,T->left);
//这里应该是取绝对值吧
if (Height(T->left)-Height(T->right)==2) {
if(x<T->left->X){
/*左旋转;*/;
}
else{
/*双左旋转;*/;
}
}
}
else if(x>T->X) {
T=insert(x,T->right);
if (Height(T->left)-Height(T->right)==2) {
if(x>T->left->X){
/*右旋转;*/;
}
else{
/*双右旋转;*/;
}
}
}
}
int main()
{
}