《求树的节点数和叶子C代码》由会员分享,可在线阅读,更多相关《求树的节点数和叶子C代码(9页珍藏版)》请在金锄头文库上搜索。
1、/求节点数#include#include#include#define TRUE 1#define FLASE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild; BiTNode,*BiTree;Status CreateBiTree(BiTree &T)TElemType e; scanf(
2、%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;elsem=BTNodeCount(T-lchild ); n=BTNodeCount(T-rchild );return (m+n+1);void main()BiTree T;prin
3、tf(请输入二叉树中节点的值(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#define OVERFLOW -2typedef int Status;typedef int TElemType;typedef struct BiTNodeTElemType data;struct BiTNode
4、*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 ); CreateBiTree(T-rchild );return OK;int LeftBiTree(BiTree T)int m,n;if(!T)return 0;else if(!T-lchild &!T-
5、rchild )return 1;elsem=LeftBiTree(T-lchild );n=LeftBiTree(T-rchild );return (m+n);void main()BiTree T;printf(请输入树中节点的值(int 型) ,0 表示空树:n);CreateBiTree(T);printf(该二叉树的树叶是%dn,LeftBiTree(T);如果需要两个程序合并,自己修改一下就可以了#include#includetypedef char ElemType ;#includeBiTree.htypedef BiTreeNode* DataType;#includeL
6、inQueue.hvoid LeverOrder(BiTreeNode * root) /层序遍历的函数,形参是一个二叉树的头指针,如果该二叉树有头结点则为其头结点的左子树 int m=0,n=0; /m为叶子节点的计数器,n 为总节点BiTreeNode *q;LQueue head; /创建一个队列,用以存放二叉树的结点地址QueueInitiate(&head); /初始化队列QueueAppend(&head, root); /二叉树第一个有用结点入队列while(QueueNotEmpty(head)QueueDelete(&head,&q);printf(%c ,q-data);n
7、+; /输出一个结点就进行一次计数,总计为总结点数目if(q-leftChild!=NULL) QueueAppend(&head, q-leftChild);if(q-rightChild!=NULL) QueueAppend(&head, q-rightChild);if(q-leftChild=NULL&q-rightChild=NULL) m+; /叶子节点为没有子树的结点,利用这个特点进行筛选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); LeverOrder(root-leftChild);Destroy(&root);