
/* 假设二叉树采取二叉链表存储结构存储,试设计一个算法,计算一颗给定的二叉树所有的双分支节点个数 分析: 其实二叉树各类操作都十分适合递归,这里我们同样可以采取递归的做法来进行统计双分支节点的个数。具体做法,我们 最开始便定义一个静态变量,递归出口既是无左右孩子。*/struct biTree { char data; struct biTree *lchild; struct biTree *rchild;};#include <stdio.h>#include <stdlib.h>int doubleNode(biTree *T) { static int num = 0;//注意这里一定要使用静态变量,不然每一次进入递归都会初始化num if (!T)num = 0; if (T->lchild&&T->rchild) { num++; doubleNode(T->lchild); doubleNode(T->rchild); } else { if (T->lchild)doubleNode(T->lchild); if (T->rchild)doubleNode(T->rchild); } return num;}int main() { int num; struct biTree *T = (struct biTree*)malloc(sizeof(struct biTree)); biTree *create(biTree *); T = create(T);//创建一颗二叉树 num = doubleNode(T); printf("该二叉树中的双分支节点个数有:%d",num); return 0;}