#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); the printf ( " % D " , T); return 0 ; } void PreTraverseBTree (BiTree T) { IF ! (T = NULL) // IF must have, while pT exists, but pT-> pLchild or pT-> pRchild is not empty, the empty data field does not point to { the 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; }