《2022年求树的节点数和叶子C代码 .pdf》由会员分享,可在线阅读,更多相关《2022年求树的节点数和叶子C代码 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/求节点数#include#include#include#define TRUE 1#define FLASE 0#define OK 1#define ERROR 0#define INFEASIBLE-1#define OVERFLOW -2 typedef int Status;typedef int TElemType;typedef struct BiTNode TElemType data;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;Status CreateBiTree(BiTree&T)TElemType e;名师资料总结-精品
2、资料欢迎下载-名师精心整理-第 1 页,共 9 页 -scanf(%d,&e);if(e=0)T=NULL;else T=(BiTree)malloc(sizeof(BiTNode);if(!T)exit(OVERFLOW);T-data=e;CreateBiTree(T-lchild);CreateBiTree(T-rchild);return OK;int BTNodeCount(BiTree T)int m=0,n=0;if(T=NULL)return 0;else m=BTNodeCount(T-lchild);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 9 页 -n
3、=BTNodeCount(T-rchild);return(m+n+1);void main()BiTree T;printf(请输入二叉树中节点的值(int型),0 表示空树:n);CreateBiTree(T);printf(该树的节点数是%dn,BTNodeCount(T);/求叶子数#include#include#include#define TRUE 1#define FLASE 0#define OK 1#define ERROR 0#define INFEASIBLE-1 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -#define OVERFLOW
4、-2 typedef int Status;typedef int TElemType;typedef struct BiTNode TElemType data;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;Status CreateBiTree(BiTree&T)TElemType e;scanf(%d,&e);if(e=0)T=NULL;else T=(BiTree)malloc(sizeof(BiTNode);if(!T)exit(OVERFLOW);T-data=e;CreateBiTree(T-lchild);名师资料总结-精品资料欢迎
5、下载-名师精心整理-第 4 页,共 9 页 -CreateBiTree(T-rchild);return OK;int LeftBiTree(BiTree T)int m,n;if(!T)return 0;else if(!T-lchild&!T-rchild)return 1;else m=LeftBiTree(T-lchild);n=LeftBiTree(T-rchild);return(m+n);void main()名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 9 页 -BiTree T;printf(请输入树中节点的值(int型),0 表示空树:n);CreateBi
6、Tree(T);printf(该二叉树的树叶是%dn,LeftBiTree(T);如果需要两个程序合并,自己修改一下就可以了#include#include typedef char ElemType;#includeBiTree.h typedef BiTreeNode*DataType;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 9 页 -#includeLinQueue.h void LeverOrder(BiTreeNode*root)/层序遍历的函数,形参是一个二叉树的头指针,如果该二叉树有头结点则为其头结点的左子树 int m=0,n=0;/m为叶子节点的计数器,
7、n 为总节点 BiTreeNode*q;LQueue head;/创建一个队列,用以存放二叉树的结点地址 QueueInitiate(&head);/初始化队列 QueueAppend(&head,root);/二叉树第一个有用结点入队列 while(QueueNotEmpty(head)QueueDelete(&head,&q);printf(%c ,q-data);n+;/输出一个结点就进行一次计数,总计为总结点数目 if(q-leftChild!=NULL)QueueAppend(&head,q-leftChild);if(q-rightChild!=NULL)QueueAppend(&
8、head,q-rightChild);if(q-leftChild=NULL&q-rightChild=NULL)m+;/叶 子名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 9 页 -节点为没有子树的结点,利用这个特点进行筛选 printf(n);printf(总结点数目为:%dn,n);printf(叶子节点数目为:%dn,m);void main()BiTreeNode*root,*p,*pp;Initiate(&root);p=InsertLeftNode(root,A);p=InsertLeftNode(p,B);p=InsertLeftNode(p,D);p=InsertRightNode(p,G);p=InsertRightNode(root-leftChild,C);pp=p;InsertLeftNode(p,E);InsertRightNode(pp,F);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 9 页 -LeverOrder(root-leftChild);Destroy(&root);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 9 页 -