已知二叉树采用链表存储结构,根结点指针为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)
}

上面的伪代码实际上就是图的深度遍历,二叉树算是一种特殊的图。
具体的写法可以搜索一下就可以找到。
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-21
int Count(AGraph *T,int v,int visit[maxSize])
{
ArcNode *p;
int que [maxSize],front=0,rear=0;
int j;
int s=0;
Visit(v);
visit(v)=1;
rear=(rear+1)%maxSize
que[rear]=v;

while(front!=rear)
{
int k=0;
front=(front+1)%maxSize;
j=que[front];
p=T->adjlist[j].firstarc
while(p!=NULL)
{
k++;
if(visit [p->adjvexj==0)
{
Visit(p->adjvex);
visit[p->adjvex]=1;
rear=(rear+1)%maxSize;
que[rear]=p->adjvex;
}
p=p->nextarc;
}
}
if(k==2)
{
s++;
}
return s;
}

已知二叉树采用链表存储结构,根结点指针为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的结点个数
int TwoBranch(Bitree T){ int s;if(T == NULL)return 0;s = (T->lchild != NULL) && (T->rchild != NULL);return s + TwoBranch(T->lchild) + TwoBranch(T->rchild);} 【2】int leafnum(Bnode *t){ int i,j;if(t==NULL)return 0;else if(t->lchild==NULL ...

已知一棵二叉树是以二叉链表的形式存储的求出以T为根的子树的结点个数...
已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下:structnode{intdata;structnode*left;structnode*right;};要求写出2个具有下面功能的算法:①、求出以T为根的子树的结... 已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下:struct node{int data;struct node * left;struct node * right...

以二叉链表为存储结构,分别写出求二叉树结点总数及叶子总数的算法...
【答案】:(1)计算结点总数 int CountNode(BinTree*root){ intnum1,num2;if(root==Null)return(0);else if(root->lchild==Null&&rooot->rchild==Null)return(1);else { num 1=CountNode(root->lchild);num 2=CountNode(root->rchild);return(num1+num2+!);} } (2)计算叶子总数...

求,编写递归算法,统计二叉树中度为2的结点个数(C语言)
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);} } ???这个应该不是你要的,希望对你有所启发。

以二叉链表作为存储结构编写计算二叉树中叶子结点数目的递归算法
tree t){ if(t.left==null&&t.right==null) return 1;else if(t.left==null) return jusuanyezijiedianshu(t.right);else if(t.right==null) return jusuanyezijiedianshu(t.left);else return jisuanyezijiedianshu(t.left)+jisuanyezijiedianshu(t.right);} ...

设二叉树的存储结构为二叉链表,编写有关二叉树的递归算法:
(1)统计二叉树中度为1的结点个数。(2)统计二叉树中度为2的结点个数。(3)统计二叉树中度为0(叶结点)的结点个数。(4)统计二叉树的高度。(5)统计二叉树的宽度,即在二叉树的各层上,具有结点数最多的那一层上的结点总数。(6)从二叉树中删... 展开 972630969...

...作为存储结构,试设计一个计算二叉树叶子结点树的递归算 法 要求用...
1、首先要定义两个类:结点类和二叉树类。2、二叉树类的组成:建立树的函数、遍历函数、删除函数。求结点数函数。3、采用递归的思想,遇到标识符表示该结点为空,否则开辟空间创建新结点,同时调用递归开辟左结点和右结点。4、前序遍历函数。5、删除函数的思路:如果当前结点不为空,采用递归访问左结点...

求一个关于求二叉树度为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);...

已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下: struct...
int data;struct node * left;struct node * right;}BiTNode,*BiTree;\/*①、求出以T为根的子树的结点个数。*\/ void CountLeaf (BiTree T, int& count){ \/\/递归方法,if ( T ){ if ((!T->lchild)&& (!T->rchild))count++;CountLeaf( T->lchild, count); \/\/ 统计左子树中叶子...

相似回答