计算一棵二叉树单分支结点个数的完整程序
#include <stdio.h> typedef struct BTNode { char data; struct BTNode * lchild; //p是指针L是左,child是孩子 struct BTNode * rchild; }BTNode,*BiTree; struct BTNode * CreateBTree(); void PreTraverseBTree(struct BTNode *); int DsonNodes(struct BTNode *); int main() { int t; struct BTNode * T = CreateBTree(); PreTraverseBTree(T); printf("\n"); t = DsonNodes(T); printf("%d",t); return 0; } void PreTraverseBTree(BiTree T) { if(T!=NULL) //if必须要有,虽然pT存在,但当pT->pLchild 或 pT->pRchild为空时没有,空没有指向的data域 { printf("%c\n", T->data); if(T->lchild!=NULL) PreTraverseBTree(T->lchild); if(T->rchild) PreTraverseBTree(T->rchild); } } int DsonNodes(BiTree T) { if(T!=NULL) { if((T->lchild==NULL&&T->rchild!=NULL)||(T->lchild!=NULL&&T->rchild==NULL)) return DsonNodes(T->lchild)+DsonNodes(T->rchild)+1; else return DsonNodes(T->lchild)+DsonNodes(T->rchild); } } struct BTNode * CreateBTree() { struct BTNode * pA = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pB = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pC = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pD = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode * pE = (struct BTNode *)malloc(sizeof(struct BTNode)); pA->data = 'A'; pB->data = 'B'; pC->data = 'C'; pD->data = 'D'; pE->data = 'E'; pA->lchild = pB; pA->rchild = pC; pB->lchild = pB->rchild =NULL; pC->lchild = pD; pC->rchild = NULL; pD->rchild = pE; pD->lchild = NULL; pE->lchild = pE->rchild = NULL; return pA; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步