统计二叉树度为1,度为2的结点个数

本题要求实现一个函数,可统计二叉树中度为1,2的结点个数。

函数接口定义:

int NodeCount ( BiTree T);

T是二叉树树根指针,函数NodeCount返回二叉树中度为1,2的结点个数,若树为空,返回0。

裁判测试程序样例:

#include 
#include 

typedef char ElemType;
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree Create();/* 细节在此不表 */

int NodeCount ( BiTree T);

int main()
{
    BiTree T = Create();

    printf("%d\n", NodeCount(T));
    return 0;
}

度为一:判断树的左子树和右子树两者之一存在即度为一,然后进行递归即可。

int NodeCount( BiTree T)
{
    if(!T) return 0;
    int cnt = 0;
    if((T->lchild!=NULL&&T->rchild==NULL) || (T->lchild==NULL&&T->rchild!=NULL)) cnt++;
    cnt+=NodeCount(T->lchild);
    cnt+=NodeCount(T->rchild);
    return cnt;
}

度为二:与上面一题思路相似,判断树的左子树和右子树都存在即度为二,然后进行递归即可。

int NodeCount( BiTree T)
{
    if(!T) return 0;
    int cnt = 0;
    if(T->lchild!=NULL&&T->rchild!=NULL) cnt++;
    cnt+=NodeCount(T->lchild);
    cnt+=NodeCount(T->rchild);
    return cnt;
}

你可能感兴趣的:(链表,c++,数据结构)