前序遍历(根左右)
①根
②左子树
③右子树
中序遍历(左根右)
①左子树
②根
③右子树
后序遍历(左右根)
①左子树
②右子树
③根
中序代码为例:
void find(根节点下标){
//1,左子树存在 访问左子树
if(a[2*k]!=0)find(2*k);
//2.访问根结点
root[++cnt]=a[k];
//3.右子树存在 访问右子树
if(a[2*k+1]!=0) find(2*k+1)
}
邻接表遍历树
void dfs(int x){
vis[x]=1;
for(int i=head[x];i!=-1;i=Next[i]){
int y=v[i];
if(vis[y]==0){
dfs(y);
}
}
}
主函数中调用:
1.只有一颗树:dfs(根节点编号)
2.遍历森林:
for(int i=1;i<=n;i++){
if(vis[i]==0){
dfs(i);
}
}