采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为啥是先序呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为啥是先序呢?相关的知识,希望对你有一定的参考价值。
采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为什么是先序呢?求解。那么广度优先遍历呢是什么
这是因为图的深度优先遍历算法先访问所在结点,再访问它的邻接点。与二叉树的先序遍历先访问子树的根结点,再访问它的孩子结点(邻接点)类似。图的广度优先遍历算法类似于二叉树的按层次遍历。
先序遍历也叫做先根遍历、前序遍历,可记做根左右(二叉树父结点向下先左后右)。
首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
例如,下图所示二叉树的遍历结果是:ABDECF。
扩展资料:
遍历种类:
一、NLR:前序遍历(Preorder Traversal 亦称(先序遍历)),访问根结点的操作发生在遍历其左右子树之前。
二、LNR:中序遍历(Inorder Traversal),访问根结点的操作发生在遍历其左右子树之中(间)。
三、LRN:后序遍历(Postorder Traversal),访问根结点的操作发生在遍历其左右子树之后。
注意:
由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为 先根遍历、中根遍历和后根遍历。
参考资料来源:百度百科-先序遍历
已知二叉树采用链表存储结构,根结点指针为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)
上面的伪代码实际上就是图的深度遍历,二叉树算是一种特殊的图。
具体的写法可以搜索一下就可以找到。 参考技术A 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;
以上是关于采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为啥是先序呢?的主要内容,如果未能解决你的问题,请参考以下文章