计算一棵二叉树的单分支数(c语言代码实现)

本题代码如下

int num(tree t)
{
	if (!t)
		return 0;
	else if ((t->lchild && t->rchild==NULL)|| (t->lchild==NULL&& t->rchild))//计算单支树
		return num(t->lchild) + num(t->rchild) + 1;
	else return num(t->lchild) + num(t->rchild);
}

完整测试代码如下

#include
#include
typedef struct treenode {
	char data;
	struct treenode* lchild, * rchild;
}treenode, * tree;
void buildtree(tree* t)//建树
{
	char ch;
	ch = getchar();
	if (ch == '#')
		t = NULL;
	else
	{
		*t = (treenode*)malloc(sizeof(treenode));//分配空间
		(*t)->data = ch;
		(*t)->lchild = NULL;
		(*t)->rchild = NULL;
		buildtree(&((*t)->lchild));
		buildtree(&((*t)->rchild));
	}
}
int num(tree t)
{
	if (!t)
		return 0;
	else if ((t->lchild && t->rchild==NULL)|| (t->lchild==NULL&& t->rchild))//计算单支树
		return num(t->lchild) + num(t->rchild) + 1;
	else return num(t->lchild) + num(t->rchild);
}
int main() {
	tree t;
	buildtree(&t);
	printf("该二叉树中有%d个单分支\n", num(t));
	return 0;
}

测试:ABD##E##CF###

/*        A
    B        C
D      E   F

*/

你可能感兴趣的:(算法,数据结构,c语言)