T) exit(OVERFLOW); T->data=ch; //创建左子树 CreateBiTree(T->lchild); //创建右子树 CreateBiTree(T->rchild); } return OK;}//输出元素dataStatus PrntTElem(TElemType data){ putchar(data); return OK;}//先序遍历二叉树Status PreOrderTraverse(BiTree T *rchild;//左右孩子指针}BiTNode //这是我上数据结构写的 建议理解为主#include<stdio.h>#include<stdlib.h>#define ERROR 0#define OK 1#define OVERFLOW -2#define FLASE 0#define TURE 1typedef int Status;typedef char TElemType;typedef struct BiTNode{ TElemType data; struct BiTNode *lchild T->rchild) return 1; else return BiTreeLeaves(T->lchild)+BiTreeLeaves(T->rchild);}//销毁int DestroyBiTree(BiTree &T){ if(T){ if(DestroyBiTree(T->lchild)) if(DestroyBiTree(T->rchild)) T=NULL; } return OK;}void main(){ BiTree T; CreateBiTree(T); printf("先序结果为:"); PreOrderTraverse(T visit)) if(visit(T->data)) return OK; return ERROR; } else return OK;}//求二叉树深度int BiTreeDepth(BiTree T){ int ldep=0 visit)) if(PostOrderTraverse(T->rchild Status(*visit)(TElemType e)){ if(T){ if(PostOrderTraverse(T->lchild visit)) return OK; return ERROR; } else return OK;}//后序遍历二叉树Status PostOrderTraverse(BiTree T visit)) if(visit(T->data)) if(InOrderTraverse(T->rchild Status(*visit)(TElemType e)){ if(T){ if(InOrderTraverse(T->lchild visit)) return OK; return ERROR; } else return OK;}//中序遍历二叉树Status InOrderTraverse(BiTree T visit)) if(PreOrderTraverse(T->rchild Status(*visit)(TElemType e)){ if(T){ if((*visit)(T->data)) if(PreOrderTraverse(T->lchild *BiTree;//构造一个二叉树Status CreateBiTree(BiTree &T){ TElemType str[]="ABC$$D$EF$$G$$$"; static int i=0; TElemType ch; ch=str[i++]; if(ch=='$') T=NULL; else{ //创建树结点 T=(BiTNode*)malloc(sizeof(BiTNode)); if( T->lchild&& T) return 0; else if( PrntTElem); printf("/n");} PrntTElem); printf("/n后序结果为:"); PostOrderTraverse(T PrntTElem); printf("/n中序结果为:"); InOrderTraverse(T BiTreeLeaves(T)); DestroyBiTree(T); printf("先序结果为:"); PreOrderTraverse(T BiTreeDepth(T)); printf("叶子数为: %d/n" PrntTElem); printf("/n二叉树的深度为: %d/n" PrntTElem); printf("/n后序结果为:"); PostOrderTraverse(T PrntTElem); printf("/n中序结果为:"); InOrderTraverse(T rdep=0; if(T==NULL) return 0; ldep=BiTreeDepth(T->lchild); rdep=BiTreeDepth(T->rchild); if(ldep>=rdep) return ldep+1; else return rdep+1; }//求叶子数int BiTreeLeaves(BiTree T){ if(
用c语言编程实现二叉树的建立和遍历二叉树
最新推荐文章于 2024-06-02 17:28:19 发布