85.png

    1. /*
    2. 假设二叉树采取二叉链表存储结构存储,试设计一个算法,计算一颗给定的二叉树所有的双分支节点个数
    3. 分析:
    4. 其实二叉树各类操作都十分适合递归,这里我们同样可以采取递归的做法来进行统计双分支节点的个数。具体做法,我们
    5. 最开始便定义一个静态变量,递归出口既是无左右孩子。
    6. */
    7. struct biTree {
    8. char data;
    9. struct biTree *lchild;
    10. struct biTree *rchild;
    11. };
    12. #include <stdio.h>
    13. #include <stdlib.h>
    14. int doubleNode(biTree *T) {
    15. static int num = 0;//注意这里一定要使用静态变量,不然每一次进入递归都会初始化num
    16. if (!T)num = 0;
    17. if (T->lchild&&T->rchild) {
    18. num++;
    19. doubleNode(T->lchild);
    20. doubleNode(T->rchild);
    21. }
    22. else {
    23. if (T->lchild)doubleNode(T->lchild);
    24. if (T->rchild)doubleNode(T->rchild);
    25. }
    26. return num;
    27. }
    28. int main() {
    29. int num;
    30. struct biTree *T = (struct biTree*)malloc(sizeof(struct biTree));
    31. biTree *create(biTree *);
    32. T = create(T);//创建一颗二叉树
    33. num = doubleNode(T);
    34. printf("该二叉树中的双分支节点个数有:%d",num);
    35. return 0;
    36. }