二叉树功能代码.docxVIP

  • 0
  • 0
  • 约8.31千字
  • 约 22页
  • 2019-03-07 发布于广东
  • 举报
#includestdio.h #includestdlib.h #includemalloc.h #define MAXSIZE 100 int count=0; typedef int KeyType; typedef struct treenode { KeyType key; struct treenode *lchild,*rchild; }BTNode; /* 在二叉树中插入一个元素。 */ BTNode *BSTInsert(BTNode *bt,KeyType k) { BTNode *f,*p=bt; while(p!=NULL) { f=p; if(p-keyk) p=p-lchild; else p=p-rchild; } p=(BTNode *)malloc(sizeof(BTNode)); p-key=k; p-lchild=p-rchild=NULL; if(bt==NULL) bt=p; else if(kf-key) f-lchild=p; else f-rchild=p; return bt; } /* 建立二叉树。 */ BTNode *CreateBST(KeyType str[],int n) { int i=0; BTNode *bt=NULL; while(in) { bt=BSTInsert(bt,str[i]); i++; } return bt; } /* 中序遍历显示二叉树元素。 */ void DispBStree(BTNode *bt) { if(bt!=NULL) { printf(%d,bt-key); if(bt-lchild!=NULL) { printf((); DispBStree(bt-lchild); if(bt-rchild!=NULL) { printf(,); DispBStree(bt-rchild); } printf()); } else if(bt-rchild!=NULL) { printf((); DispBStree(bt-lchild); if(bt-rchild!=NULL) { printf(,); DispBStree(bt-rchild); } printf()); } } } /* 在二叉树中删除一个元素。 */ BTNode *BSTDelete(BTNode *bt,KeyType k) { BTNode *p,*f,*s,*q; p=bt; f=NULL; while(p) { if(p-key==k) break; f=p; if(p-keyk) p=p-lchild; else p=p-rchild; } if(p==NULL) return bt; if(p-lchild==NULL) { if(f==NULL) bt=p-rchild; else if(f-lchild==p) f-lchild=p-rchild; else f-rchild=p-rchild; free(p); } else { q=p; s=p-lchild; while(s-rchild) { q=s; s=s-rchild; } if(q==p) q-lchild=s-lchild; else q-rchild=s-lchild; p-key=s-key; free(s); } return bt; } /* 在二叉树中查找一个元素。 */ BTNode *BSTSearch(BTNode *bt,KeyType k) { if(bt==NULL) return(NULL); else { if(k==bt-key) return(bt); else if(kbt-key) return(BSTSearch(bt-lchild,k)); else return(BSTSearch(bt-rchild,k)); } } /* 求叶子结点数目。 */ void Leafnum(BTNode *bt) { if(bt) { if(bt-lchild==NULLbt-rchild==NULL) count++; Leafnum(bt-lchild);

文档评论(0)

1亿VIP精品文档

相关文档