【算法】二叉树的各种遍历方式

1.前序遍历
根-左-右的顺序遍历,可以使用递归

void preOrder(Node *u){
    if(u==NULL)return;
    printf("%d ",u->val);
    preOrder(u->l);preOrder(u->r);
}

2.中序遍历
左-根-右的顺序遍历,可以使用递归

void inOrder(Node *u){
    if(u==NULL)return;
    inOrder(u->l);
    printf("%d ",u->val);
    inOrder(u->r);
}

3.后序遍历
左-右-根的顺序遍历,可以使用递归

void postOrder(Node *u){
    if(u==NULL)return;
    postOrder(u->l);postOrder(u->r);
    printf("%d ",u->val);
}

4.层序遍历
使用队列,类似于BFS宽搜算法
每次将左和右结点放入队列,然后将队头输出

void bfs(Node *t){
	queue<Node*>q;
	Node *ft;
	q.push(t);
	while(q.size()){
		ft=q.front();
		q.pop();
		if(ft==NULL)continue;
		else{
			printf("%d ",ft->val);
			q.push(ft->l);
			q.push(ft->r);
		}
	}
	
}
posted @ 2022-03-13 10:16  计算机知识杂谈  阅读(74)  评论(0编辑  收藏  举报