谁会二叉树C语言程序?
#include<stdio。h>#defineQUEUE_MAX_SIZE20#defineSTACK_MAX_SIZE10 typedefintelemType;#include"BT。 c" /************************************************************************/ /* 以下是关于二叉搜索树操作的4个简单算法 */ /***********************************************************************...全部
#include<stdio。h>#defineQUEUE_MAX_SIZE20#defineSTACK_MAX_SIZE10 typedefintelemType;#include"BT。
c" /************************************************************************/ /* 以下是关于二叉搜索树操作的4个简单算法 */ /************************************************************************/ /*1。
查找*/ /*递归算法*/ elemType*findBSTree1(structBTreeNode*bst,elemTypex) { /*树为空则返回NULL*/ if(bst==NULL){ returnNULL; }else{ if(x==bst->data){ return&(bst->data); }else{ if(x<bst->data){ /*向左子树查找并直接返回*/ returnfindBSTree1(bst->left,x); }else{ /*向右子树查找并直接返回*/ returnfindBSTree1(bst->right,x); } } } } /*非递归算法*/ elemType*findBSTree2(structBTreeNode*bst,elemTypex) { while(bst!=NULL){ if(x==bst->data){ return&(bst->data); }elseif(x<bst->data){ bst=bst->left; }else{ bst=bst->right; } } returnNULL; } /*2。
插入*/ /*递归算法*/ voidinsertBSTree1(structBTreeNode**bst,elemTypex) { /*新建一个根结点*/ if(*bst==NULL){ structBTreeNode*p=(structBTreeNode*)malloc(sizeof(structBTreeNode)); p->data=x; p->left=p->right=NULL; *bst=p; return; }elseif(x<(*bst)->data){ /*向左子树完成插入运算*/ insertBSTree1(&((*bst)->left),x); }else{ /*向右子树完成插入运算*/ insertBSTree1(&((*bst)->right),x); } } /*非递归算法*/ voidinsertBSTree2(structBTreeNode**bst,elemTypex) { structBTreeNode*p; structBTreeNode*t=*bst,*parent=NULL; /*为待插入的元素查找插入位置*/ while(t!=NULL){ parent=t; if(x<t->data){ t=t->left; }else{ t=t->right; } } /*建立值为x,左右指针域为空的新结点*/ p=(structBTreeNode*)malloc(sizeof(structBTreeNode)); p->data=x; p->left=p->right=NULL; /*将新结点链接到指针为空的位置*/ if(parent==NULL){ *bst=p; /*作为根结点插入*/ }elseif(x<parent->data){ /*链接到左指针域*/ parent->left=p; }else{ parent->right=p; } return; } /*3。
建立*/ voidcreateBSTree(structBTreeNode**bst,elemTypea[],intn) { inti; *bst=NULL; for(i=0;i<n;i++){ insertBSTree1(bst,a[i]); } return; }。
收起