打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
二叉树
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define OVERFLOW -1 typedef int Status;typedef char TElemType;typedef struct BiTNode{ TElemType data; struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;Status CreateBiTree(BiTree &T){ char ch; scanf("%c",&ch); //这是个坑,记住这个scanf会接收字符,包括回车,所以创建树的时候字符要连着输,不要按回车,否则第二次输入字符的时候scanf会接收上一次输入结束时按的回车 if (ch =='#') T = NULL; else{ if (!( T = (BiTNode *)malloc( sizeof(BiTNode) ) ) ){ exit(OVERFLOW); } T->data = ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK;}Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){ if (T){ Visit(T->data); PreOrderTraverse(T->lchild, Visit); PreOrderTraverse(T->rchild, Visit); } return OK;}Status InOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){ if (T){ InOrderTraverse(T->lchild, Visit); Visit(T->data); InOrderTraverse(T->rchild, Visit); } return OK;}Status PostOrderTraverse (BiTree T, Status (* Visit)(TElemType e)){ if (T){ PostOrderTraverse(T->lchild, Visit); PostOrderTraverse(T->rchild, Visit); Visit(T->data); } return OK;}Status Visit(TElemType e){ printf("%c ", e); return OK;}int BiTreeDepth(BiTree T){ //返回二叉树的深度 int i,j; if(!T) return 0; if(T->lchild) i=BiTreeDepth(T->lchild); else i=0; if(T->rchild) j=BiTreeDepth(T->rchild); else j=0; return i>j?++i:++j;}int Leaf(BiTree T){ // 求二叉树叶子结点数目 int n,m; if (T==NULL) return 0; else if ((T->lchild == NULL) && (T->rchild == NULL)) return 1; // 如果二叉树的左孩子和右孩子均为空,则返回 1 else{ // 如果二叉树的左孩子或右孩子不为空 n = Leaf (T->lchild); // 求 T 的左子树的叶子结点数目 m = Leaf (T->rchild); // 求 T 的右子树的叶子结点数目 return n+m; // 返回总的叶子结点数目 }}int main(){ BiTree T; printf("请手动创建二叉树\n\t"); //ABM##CD###E#FGH##K### CreateBiTree(T); //注意创建的时候 每个叶子结点都没有子树 所以都需要输入# printf("\n二叉树创建成功!\n"); printf("\n\n\n二叉树深度\n"); printf("%d\n",BiTreeDepth(T)); printf("\n\n\n叶子结点个数\n"); printf("%d\n",Leaf(T)); //PreOrder printf("\n\n\n先序遍历\n"); PreOrderTraverse(T, Visit);//InOrder printf("\n\n\n中序遍历\n"); InOrderTraverse(T, Visit);//PostOrder printf("\n\n\n后序遍历\n"); PostOrderTraverse(T, Visit); printf("\n\n\n\n"); system("pause"); return 0;}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
编写算法,按树状打印二叉树的算法
第二十四课 遍历二叉树
二叉树各种操作的C语言实现
数据结构算法总结(三)
带你一文看懂二叉树的先(中、后)序遍历以及层次遍历(图解+递归/非递归代码实现)
二叉树中的三种遍历方式 | silenceper
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服