二叉排序树的建立以及相关操作 C语言

来源:互联网 发布:非凡软件站安全吗 编辑:程序博客网 时间:2024/06/05 09:16
 
 /********************************************************/#include <stdio.h>#include <stdlib.h>#include <malloc.h>/********************************************************/#define OK1#defineERROR0#defineTRUE1#defineFALSE0typedefintElemType;//数据类型typedefintStatus;//返回值类型/********************************************************/typedef struct BiTNode{ElemTypedata;//数据域struct BiTNode*lChild, *rChlid;//左右子树域}BiTNode, *BiTree;/********************************************************///先序创建二叉树Status CreateBiTree(BiTree *T){ElemType ch;ElemType temp;scanf("%d", &ch);temp = getchar();if (-1 == ch)*T = NULL;else{*T = (BiTree)malloc(sizeof(BiTNode));if (!(*T))exit(-1);(*T)->data = ch;printf("输入%d的左子节点:", ch);CreateBiTree(&(*T)->lChild);printf("输入%d的右子节点:", ch);CreateBiTree(&(*T)->rChlid);}return OK;}/********************************************************///先序遍历二叉树void TraverseBiTree(BiTree T){if (NULL == T)return ;printf("%d ", T->data);TraverseBiTree(T->lChild);TraverseBiTree(T->rChlid);}/********************************************************///二叉查找/*递归查找二叉排序树T中是否存在key指针f指向T的双亲,其初始调用值为NULL若查找成功,则指针p指向该数据元素结点,并返回TRUE否则指针p指向查找路径上访问的最后一个结点并返回FALSE*/Status SearchBST(BiTree T, int key, BiTree f, BiTree *p){if (!T)//未找到{*p = f;return FALSE;}else if (key == T->data)//查找成功{*p = T;return TRUE;}else if (key<T->data)return SearchBST(T->lChild, key, T, p);elsereturn SearchBST(T->rChlid, key, T, p);}/********************************************************/Status InsertBST(BiTree *T, int key){BiTree p, s;if (!SearchBST(*T, key, NULL, &p)){s = (BiTree)malloc(sizeof(BiTNode));s->data = key;s->lChild = s->rChlid = NULL;if (!p)*T = s;else if (key<p->data)p->lChild = s;elsep->rChlid = s;return TRUE;}elsereturn FALSE;}/********************************************************/int main(void){BiTree T;BiTree *p = (BiTree*)malloc(sizeof(BiTree));int i=0;CreateBiTree(&T);//SearchBST(T, 98, NULL, p);InsertBST(&T, 99);TraverseBiTree(T);return 0;}

原创粉丝点击