请编写函数,求二叉树的分枝结点(非终端结点)个数。
函数原型
int BinTreeNumBranch(const TNODE *root);
说明:root
为二叉树的根指针,函数值为二叉树的非终端结点数。
在头文件 BinTree.h 中声明函数,在程序文件 BinTree.c 中编写函数。
BinTree.h
......
int BinTreeNumBranch(const TNODE *root);
......
BinTree.c
......
/* 你提交的代码将被嵌在这里 */
裁判程序
main.c
#include <stdio.h>
#include "BinTree.h"
int main()
{
TNODE *r;
BinTreeCreate(&r);
BinTreeInput(&r);
printf("%d\n", BinTreeNumBranch(r));
BinTreeDestroy(&r);
return 0;
}
输入样例
EIBJ##H###DF#A##G#C##
输出样例
6
答案:
int BinTreeNumBranch(const TNODE *root)
{
if (!root) return 0;
if (root -> lch == NULL && root -> rch == NULL) return 0;//选择出度为0的点
return (BinTreeNumBranch(root -> lch) + BinTreeNumBranch(root -> rch) + 1);//度为0的点则加一
}