基本操作
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() { }