算法基础之ADT树

来源:互联网 发布:股票下载什么软件 编辑:程序博客网 时间:2024/06/10 13:46
#ifndef _ADT_TREE_#define _ADT_TREE_#include<stdio.h>#include<stdlib.h>#include<string.h>typedef int Element;typedef struct node{Element data;struct node* left;struct node* right;Element height;}*tree;typedef struct node *Position;tree MakeEmpty(tree T);//清空树Position Find(Element x, tree T);//查找节点位置Position FindMin(tree T);//查找树中最小值Position FindMax(tree T);//查找树中最大值tree insert(Element x,tree T);//插入元素void display(tree T);//显示元素tree Delete(Element x, tree T);//删除元素#endif


#include"ADT_tree.h"tree MakeEmpty(tree T)//清空树{if (T != NULL){MakeEmpty(T->left);MakeEmpty(T->right); free(T);}return NULL;}Position Find(Element x, tree T)//查找节点位置{if (T == NULL)return NULL;if (x == T->data)return T;else if (x < T->data)return Find(x, T->left);else if (x > T->data)return Find(x, T->right);}Position FindMin(tree T)//插查找树中最小值,递归实现{if (T == NULL)return NULL;if (T->left == NULL)return T;elsereturn FindMin(T->left);}Position FindMax(tree T)//查找树中最大值,非递归实现{if (T == NULL)return NULL;while (T->right == NULL)T = T->right;return T;}tree insert(Element x, tree T)//插入元素{if (T == NULL){T = (tree)malloc(sizeof(struct node));memset(T, NULL, sizeof(struct node));if (T == NULL)printf("out of space\n");else{T->data = x;T->left = NULL;T->right = NULL;}}else if (x < T->data){T->left = insert(x,T->left);}else if (x > T->data){T->right = insert(x, T->right);}return T;}void display(tree T)//显示元素{if (T == NULL){return;}else{display(T->left);printf("%d ", T->data);display(T->right);}}tree Delete(Element x, tree T)//删除元素{Position temp;if (T == NULL){return NULL;}if (x < T->data)T->left = Delete(x, T->left);else if (x > T->data)T->right = Delete(x, T->left);else if (T->left && T->right)//找到相同元素且该节点有左右子树{temp = FindMin(T->right);T->data = temp->data;T->right = Delete(T->data, T->right);}else     //相同节点只有一个子树{temp = T;if (T->left){T = T->left;free(temp);}else if (T->right){T = T->right;free(temp);}}return T;}


/*应用程序*/#include"ADT_tree.h"int main(void){tree T;T = (tree)malloc(sizeof(struct node));memset((void *)T, NULL, sizeof(struct node));T->data = 1;insert(2,T);insert(3, T);display(T);Delete(2, T);display(T);return 0;}



0 0