二叉树的基础遍历2.0

1.0入口:二叉树的基础遍历-CSDN博客

在1.0中使用的是简单的结构体建树,本文注重用二维vector建树

前序,中序和后序的分析1.0已给出,本文不做过多介绍,本文重点讲二叉树的层序遍历。

先奉上前中后序的代码:

#include<bits/stdc++.h>
#define int long long 
#define endl "\n"
#define fi first
#define se second
using namespace std;
const int N=1e6+5;
vector<pair<int,int>> v[N];
void qx(int x){
	cout << x << " ";
	if(v[x][0].fi!=0) qx(v[x][0].fi);
	if(v[x][0].se!=0) qx(v[x][0].se);
}
void zx(int x){
	if(v[x][0].fi!=0) zx(v[x][0].fi);
	cout << x << " ";
	if(v[x][0].se!=0) zx(v[x][0].se);
}
void hx(int x){
	if(v[x][0].fi!=0) hx(v[x][0].fi);
	if(v[x][0].se!=0) hx(v[x][0].se);
	cout << x << " ";
}
void solve(){
	int n;
	cin >> n;
	for(int i=1;i<=n;++i){
		int l,r;
		cin >> l >> r;
		v[i].push_back({l,r});
	}
	qx(1);
	cout << endl;
	zx(1);
	cout << endl;
	hx(1);
	cout << endl;
	return ;
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;
	//cin >> t;
	//while(t--) 
	solve();
	return 0;
}

浅谈一下什么是层序遍历:层序遍历就是从左到右,一层一层的遍历。

层序遍历用递归的话有点违背递归的宗旨,递归是一直深入到某个点在回溯,而用递归每次深入就必须回退一次,如下图所示:

在这里插入图片描述

本文所用的方法为非递归(本蒟蒻不会递归的方法),非递归基于队列的实现。

  • 首先将二叉树的根节点push到队列中
  • 然后判断队列不为空,分别判断队首的第一个元素和第二个元素是否为空
  • 若不为空将这些元素存入到一个数组中,并且让这些元素进队,判断完后队首出队
  • 循环操作,直到队列为空

实现代码:

#include<bits/stdc++.h>
#define int long long 
#define endl "\n"
#define fi first
#define se second
using namespace std;
const int N=1e6+5;
vector<pair<int,int>> v[N];
pair<int,int> pa;
queue<int> q;
vector<int> ans;
void cx(int x){
	if(x!=0) q.push(x);
	ans.push_back(x); 
	while(!q.empty()){
		pa=v[q.front()][0];//提取出队首
		if(pa.fi!=0){//判断队首的第一个元素是否为空
			ans.push_back(pa.fi); 
			q.push(pa.fi);
		} 
		if(pa.se!=0){//判断队首的第二个元素是否为空
		ans.push_back(pa.se);
		q.push(pa.se);	
		} 
		q.pop();	
	}
	for(auto via : ans){
		cout << via << " ";
	}
}
void solve(){
	int n;
	cin >> n;
	for(int i=1;i<=n;++i){
		int l,r;
		cin >> l >> r;
		v[i].push_back(make_pair(l,r));
	} 
	cx(1);
	return ;
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;
	//cin >> t;
	//while(t--) 
	solve();
	return 0;
}

相关推荐

  1. 【golang】

    2024-05-10 20:42:03       21 阅读
  2. 2024-05-10 20:42:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 20:42:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 20:42:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 20:42:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 20:42:03       18 阅读

热门阅读

  1. MySQL变量的定义与使用

    2024-05-10 20:42:03       10 阅读
  2. mysql 按字段查询重复的数据

    2024-05-10 20:42:03       14 阅读
  3. CentOS常见的命令

    2024-05-10 20:42:03       7 阅读
  4. 【无标题】

    2024-05-10 20:42:03       13 阅读
  5. AI写代码:请帮我写一段kmeans算法的python代码

    2024-05-10 20:42:03       10 阅读
  6. 【面试干货】HTTP和HTTPS之间的主要区别

    2024-05-10 20:42:03       9 阅读
  7. Leetcode 第396场周赛 问题和解法

    2024-05-10 20:42:03       10 阅读
  8. Openssl X509证书从HexStream中解析

    2024-05-10 20:42:03       11 阅读
  9. node.js中 cluster 模块和 worker_threads 模块

    2024-05-10 20:42:03       8 阅读