数据结构遍历什么意思?

 我来答
大沈他次苹0B
2022-10-24 · TA获得超过7358个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:181万
展开全部
数据结构中"遍历"是什么意思?
所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。

遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

遍历方案

1.遍历方案

从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:

1)访问结点本身(N),

2)遍历该结点的左子树(L),

3)遍历该结点的右子树(R)。

以上三种操作有六种执行次序:

NLR、LNR、LRN、NRL、RNL、RLN。

注意:

前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。

2.三种遍历的命名

根据访问结点操作发生位置命名:

① NLR:前序遍历(PreorderTraversal亦称(先序遍历))

——访问结点的操作发生在遍历其左右子树之前。

② LNR:中序遍历(InorderTraversal)

——访问结点的操作发生在遍历其左右子树之中(间)。

③ LRN:后序遍历(PostorderTraversal)

——访问结点的操作发生在遍历其左右子树之后。

注意:

由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtlee)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。

遍历算法

1.中序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

(1)遍历左子树;

(2)访问根结点;

(3)遍历右子树。

2.先序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

(1) 访问根结点;

(2) 遍历左子树;

(3) 遍历右子树。

3.后序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

(1)遍历左子树;

(2)遍历右子树;

(3)访问根结点。

4.中序遍历的算法实现

用二叉链表做为存储结构,中序遍历算法可描述为:

void InOrder(BinTree T)

{ 算法里①~⑥是为了说明执行过程加入的标号

① if(T) { 如果二叉树非空

② InOrder(T->lchild);

③ printf("%c",T->data); 访问结点

④ InOrder(T->rchild);

⑤ }

⑥ } InOrder

遍历序列

1.遍历二叉树的执行踪迹

三种递归遍历算法的搜索路线相同(如下图虚线所示)。

具体线路为:

从根结点出发,逆时针沿着二叉树外缘移动,对每个结点均途径三次,最后回到根结点。

2.遍历序列

(1) 中序序列

中序遍历二叉树时,对结点的访问次序为中序序列

【例】中序遍历上图所示的二叉树时,得到的中序序列为:

D B A E C F

(2) 先序序列

先序遍历二叉树时,对结点的......>>
数据结构题目:求三个遍历分别是什么 15分
1、先观察中序遍历第一个元素A,它应该是整棵树中最左的节点;2、再观察后序遍历最后一个元素(也是A),他是整棵树中最中间的节点;3、结合上述两点,可以确定A是树的根节点,而且,这棵树没有左子树;4、接下来观察后序遍历中的B,他在后序遍历中是A之前的元素,而且结合这棵树没有左子树这一 点,可以确定,B是A的直接右孩子;5、确定了A、B的位置后,可以观察中序遍历树,A和B之间有EHCF,这就证明了EHCF都是B的左子孙,只要确定EHCF之间的位置关系就可以把它链接上B了;(第6步会说明)6、为了确定EHCF的相对位置关系,我们先观察中序遍历中,他们的顺序是EHCF,而后序遍历中他们是HEFC,经过几次尝试后,很容易就会发现正确的相对位置了;7、剩下的IGD也可以按理推断出来
数据结构 图的遍历
图的遍历:#include

#define INFINITY 0

#define MAX_VERTEX_NUM 20

typedef int VRType,InfoType;

typedef char VertexType;

typedef struct ArcCell{

VRType adj;VrType是顶点关系类型,对无权图,用1或0表示相邻否,对有权图为权值类型

InfoType *;

}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct{

VertexType vexs[MAX_VERTEX_NUM];

AdjMatrix arcs;

int vexnum,arum;图的当前顶点数和弧数

}MGraph;

int LocateVex(MGraph G,VertexType v){

int i;

for(i=0;i

if(G.vexs[i]==v)

{

return i;

break;

}

i++;

}

if(i>=G.vexnum) return -1;

}

int CreateUDN(MGraph &G){创建无向网

int IncInfo,i,k,j,w;

VertexType v1,v2;

printf("开始构造一个无向网\n");

printf("请输入图的顶点数 边数 弧是否包含其他信息\n");

scanf("%d%d%d",&G.vexnum,&G.arum,&IncInfo);

printf("输入各顶点元素");

for(i=0;i

for(i=0;i

for(j=0;j

G.arcs[i][j].adj=INFINITY;

G.arcs[i][j].=NULL;

}

for(k=0;k

printf("输入一条边依附的顶点及权:");

scanf("\n%c%c%d",&v1,&v2,&w);

i=LocateVex(G,v1);确定v1和v2在G中的位置

j=LocateVex(G,v2);

G.arcs[i][j].adj=w;

if(IncInfo) {

printf("输入弧包含的信息:");

scanf("%d",&G.arcs[i][j].);

}

G.arcs[j][i]=G.arcs[i][j];

}

return 1;

}

void DispGraph(MGraph G){输出图的邻接矩阵表示

int i,j;

for(i=0;i

{

for(j=0;j >
数据结构中树的遍历是什么意思?
按字面理解就明白了,就是全部访问经历一遍。
数据结构顺序表的遍历操作要怎么写,急急急急!谢谢~
临时帮你编了一个程序

#include

using namespace std;

void visit(int x)

{

cout<

}

void trave(int a[],int n,void (*visit)(int))

{

for(int i=0;i

visit(a[i]);

}

void main()

{

int a[]={1,2,3,4,5};

trave(a,5,visit);

}

所以实现上面的代码很简单

typedef Elem int;

void visit(iElem x)

{

cout<

}

SqList Traverse(SqList L,void (*visit)(Elem))

{

for(int i=0;i

visit(L.base[i]);

return L;

}
数据结构 深度优先遍历
我帮你复习一下图的知识:

深度优先遍历:

深度优先就是从树的某个节点开始搜索,查看它所有的领结点,如果这个邻接点的无其他邻接点,则忽略该节,再次访问下个节,以此类推,一直到访问到的邻接点再没有其它的邻接点为止,这个节点就是开始,然后依此回退。访问中要将访问过的节点作标记。

广度优先遍历:

广度优先就是从树的某个节点开始搜索,将他的所有的节点先用队列机制保存,找完节点后,处理队列中的节点,处理时,如果某个节点又有邻接点就进队列,以此访问完整个树,这个访问相当与二叉树的层次遍历访问。

我的语言表达能力有限,不知能否看懂。

所以这题,依次往下跑,到H时跑不动了,所以H是头,然后到I,依次类推,跟二叉树访问用后续法差不多。

D项很容易得到。

其实这题用排除法,直接选D。
数据结构 层次遍历
你的问题大概出在:

1. 初始化时 参数没使用引用型,又没有return。void InitSque(BiQue Q)应改为:void InitSque(BiQue &Q)

2. 插入时 参数没使用引用型,又没有return。int InSque(BiQue Q,BitTree T)应改为:int InSque(BiQue Q,BitTree &T)
数据结构图的遍历代码
网上找
数据结构链表遍历C语言
求采纳!#include "stdio.h"#include "stdlib.h"#define NULL 0#define Error 0typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;LinkList CreatList(LinkList,int);LinkList CreatList(LinkList L,int n){LinkList p;int i;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;for(i=n;i>0;--i){p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);p->next=L->next;L->next=p;}return L;}void Getelem(LinkList L)遍历链表{LinkList q;q=L->next;for(q->next;q;q=q->next)printf("%d",q->data);}void main(){LinkList L;int a;puts("请输入链表长度:");scanf("%d",&a);L=CreatList(L,a); L要接收函数返回指针Getelem(L);}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式