求一个关于求二叉树度为2的结点数 的算法

要求中序遍历来求
Void inorder(t,&c)
{
If(t!=null)
{inorder(t->lchild,c) ;
if (t->lchild!=null)&&(t->rchild!=null) c++;
inorder(t->rchild,c)
}
}

这个可以、吗?我总是觉得有点错误的

第1个回答  推荐于2018-05-10
分析:二叉树中2度结点数的递归定义为
①当T为空或为叶子时,以T为根的二叉树的2度结点数为0;
②当T是2度结点时,以T为根的二叉树的2度结点数为T的左右子树中2度结点数这和再加上T结点本身;
③当T是1度结点时,以T为根的二叉树中2度结点数为T的左或子树中2度结点数之和.
其算法如下:
int D2Nodes(BinTree T){
if(!T||!T->lchild&&!T->rchild) //T为空或是叶子
return 0;
if(T->lchild&&T->rchild) //T是2度结点
return 1+D2Nodes(T->lchild)+D2Nodes(T->rchild);
else //T是1度结点
return D2Nodes(T->lchild)+D2Nodes(T->rchild);
}本回答被网友采纳
第2个回答  2008-02-28
一开始没看见度要是2,哈哈
算法中的+1就是访问中根节点

typedef struct {
Tree *left;
Tree *left;
int data;////节点数据存储点,类型任意
} Tree ;

int treeNodeCount(*Tree t)
{
if(t==null)
return 0;
else {
if ((t->left!=null)&&(t->right!=null))
return treeNodeCount(t->left)+1+treeNodeCount(t->right);
else return 0;
}
}
你的算法也是可以的本回答被提问者采纳
第3个回答  2008-02-28
int Tree::TreeNum(TreeNode *p)
{
int left=0,right=0;
if(p->left!=NULL)
left=TreeNum(p->left);
if(p->right!=NULL)
right=TreeNum(p->right);
return left+right+1;
}
这就是大概的思路吧,你在完善完善就行
相似回答