求一个关于求二叉树度为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;
}
这就是大概的思路吧,你在完善完善就行

求一个关于求二叉树度为2的结点数 的算法
③当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);...

编写递归算法,统计二叉树中度为2的结点个数
if (root->left != NULL && root->right != NULL)return 1 + countDegreeTwo(root->left) + countDegreeTwo(root->right);return countDegreeTwo(root->left) + countDegreeTwo(root->right);}

...结点指针为T,请写出计算二叉树中度为2的结点数目的非递归算法...
采用深度或者广度遍历就可以,分别采用栈或者队列结构。对于访问到的每个节点,如果度为2,就是所求的。比如用栈的话 push(ST,root)while(not empty(ST)){ node=pop(ST)if(node->left)push(ST,node->left)if(node->right)push(ST,node->right)} 上面的伪代码实际上就是图的深度遍历,二叉树...

求,编写递归算法,统计二叉树中度为2的结点个数(C语言)
int i,j;if( t == NULL )return 0;else if( t->lchild == NULL && t->rchild == NULL )return 1;else { i = leafnum(t->lchild);j = leafnum(t->rchild);return (i+j);} } ???这个应该不是你要的,希望对...

二叉树算法是什么?
1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。二叉树算法常被用于实现二叉查找树和二叉堆。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

二叉树有多少结点?
6个。假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数。根据二叉树的性质 n0=n2+1 则 度为0的结点数位5+1=6个,也就是叶子结点有6个。有6个叶子结点的二叉树的度肯定等于3 (因为2的3次方=8大于6),据此可以推算出该二叉树的总结点数为11。

二级office二叉树结点怎么算的
这些节点没有子节点),并且知道度为2的节点数为n2(每个这样的节点都有两个子节点),则可以根据公式n0=n2+1来推断节点的分布情况。这种节点计数方法对于理解二叉树的结构非常重要,特别是在设计算法或数据结构时。通过这些规则,我们可以更精确地预测二叉树的行为,从而优化程序的性能。

某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数是?
设n1为二叉树T中度为1的结点数.因为二叉树中所有结点的度军小于或等于2,所以其结点总数为 n=n0+n1+n2 (1)再看二叉树中的分支数.除了根结点外,其余结点都有一个分支进入,设B为分支总数,则n=B+1.由于这些分支是由度为1或2的结点射出的,所以B=n1+2n2.于是得 n=n1+2n2+1 (2)...

某二叉树中有n个度为2的结点,则该二叉树中的叶子结点为?
设二叉树有a个度为二的节点,b个度为1的节点,c个叶子节点。则二叉树的节点个数m=a+b+c 每条边对应一个节点,只有根节点没有相应的边。所以节点个数m= 边数n+1 一个度为2的节点对应有2条出边,一个度为1的节点对应有条出边,所以边数n=所有节点的度之和=2*a+1*b m=(2*a+1*b...

求二叉树结点的算法怎么写?
方法一:在构建二叉树时,可以引入一个计数器变量,初始化为零。每当新增一个结点时,计数器自动递增。通过这种方法,结点数量在构建过程中就得到自动计算。方法二:在遍历整棵二叉树的过程中,采用深度优先搜索或广度优先搜索策略,对于每一个访问到的结点,执行一次计数操作,同样地,计数器在遍历过程中...

相似回答