用c语言编程实现二叉树的建立和遍历二叉树

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(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值