二叉树的递归遍历和叶子数,深度.doc

上传人:文库蛋蛋多 文档编号:2888077 上传时间:2023-03-01 格式:DOC 页数:5 大小:19KB
返回 下载 相关 举报
二叉树的递归遍历和叶子数,深度.doc_第1页
第1页 / 共5页
二叉树的递归遍历和叶子数,深度.doc_第2页
第2页 / 共5页
二叉树的递归遍历和叶子数,深度.doc_第3页
第3页 / 共5页
二叉树的递归遍历和叶子数,深度.doc_第4页
第4页 / 共5页
二叉树的递归遍历和叶子数,深度.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《二叉树的递归遍历和叶子数,深度.doc》由会员分享,可在线阅读,更多相关《二叉树的递归遍历和叶子数,深度.doc(5页珍藏版)》请在三一办公上搜索。

1、数据结构实验报告四实验内容: 建一个二叉树并对其进行遍历,并求出该树的叶子数和深度 学号:20105101256 姓名:肖丽芳 一、上机实验的问题和要求(需求分析): 题目 1从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。2 求该二叉数的深度、并统计叶子结点的个数。二、程序设计的基本思想,原理和算法描述: 根据先序遍历的性质,先建立头结点,再建立左右子树,利用递归算法,先序建立二叉树。对树进行遍历时,根据先序、中序、后序不同的算法,将输出不同的序列。求树的叶子数和深度是要判断树是否为空,然后依据算

2、法看左右孩子。三、调试和运行程序过程中产生的问题及采取的措施:写主函数时注意不要抄写错误,尤其是大小写,注意函数的调用四、源程序及注释 源程序 程序名: 二叉树#include#include#include#define ERROR 0#define OK 1#define OVERFLOW -1#define NULL 0typedef int Status;typedef char TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;/左右孩子指针BiTNode,*BiTree;/二叉

3、树的二叉链表存储表示BiTree CreatBiTree(BiTree T)/按先序次序输入二叉树中结点的值(一个字符),空格字符表示空数/构造二叉连表表示的二叉树Tchar ch;scanf(%c,&ch);if(ch=#) T=NULL;/用#表示空指针elseT=(BiTree)malloc(sizeof(BiTNode);T-data=ch;/生成根结店T-lchild=CreatBiTree(T-lchild);/生成左子树T-rchild=CreatBiTree(T-rchild);/生成右子树return T;/createbitreevoid Preorder(BiTree T

4、) if(T!=NULL)/树非空printf(%c,T-data);/访问根结点Preorder(T-lchild);/先序遍历左子树Preorder(T-rchild);/先序遍历右子树/先序遍历二叉树void Inorder(BiTree T) if(T!=NULL)/树非空Inorder(T-lchild);/中序遍历左子树 printf(%c,T-data);/访问根结点Inorder(T-rchild);/中序遍历右子树/中序遍历二叉树void Postorder(BiTree T) if(T!=NULL)/树非空Postorder(T-lchild);/后序遍历左子树Postor

5、der(T-rchild);/后序遍历右子树 printf(%c,T-data);/访问根结点/后序遍历二叉树int Leaf_Count(BiTree T)/求二叉树中叶子结点的数目if(!T) return 0;/空树没有叶子else if(!T-lchild &!T-rchild ) return 1;/叶子节点else return Leaf_Count(T-lchild)+Leaf_Count(T-rchild);/左子树的叶子数加上右子树的叶子数int Height(BiTree T)int m,n;if(T=NULL) return 0;/空数深度为0else m=Height(

6、T-rchild);/m为右孩子的深度n=Height(T-lchild);/n为左孩子的深度if(mn)return(m+1);/如果右孩子的深度大于左孩子的深度则右孩子m+1else return(n+1);/否则左孩子n+1void main()BiTree T=NULL; T=CreatBiTree(T);int depth;int Leaf; printf(先序遍历的顺序是); Preorder(T);printf(n); printf(中序遍历的顺序是); Inorder(T);printf(n);printf(后序遍历的顺序是); Postorder(T);printf(n);Leaf=Leaf_Count(T);printf(此二叉树的叶子数为:%dn,Leaf);depth=Height(T);printf(此二叉树的深度为:%dn,depth);五、运行结果 ABC#DE#G#F#先序遍历的顺序是:ABCDEGF中序遍历的顺序是:CBEGDFA后序遍历的顺序是:CGEFDBA此二叉树的叶子数为:3此二叉树的深度为:5Press any key to conntinue

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号