层序构造&层序遍历
要用到一个协助队列
层序构造
假设要构造的二叉树的层序遍历序列存在一个数组里
1.只要数组不为空,就先入队数组首元素,并用这个值创建二叉树的root。
2.然后进入循环,队列不为空,就拿队头元素,对头再出队。队列为空,结束循环。
3.只要数组还有元素,就先给刚刚拿出的对头元素创建左孩子,然后左孩子入队。
4.同上,再创建右孩子,右孩子入队。
5.结束一次循环。回到2
层序遍历
与层序构造类似
1.树不为空,root先入队
2.进入循环,队列不为空,则拿到队头元素,对头出队。队列为空,结束循环。
3.打印刚刚对头元素的数据。
4.它如果存在左孩子,左孩子入队。
5.它如果存在右孩子,右孩子入队。
6.结束一次循环,回到2
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef int type;
typedef struct treeNode {
type data;
treeNode* left;
treeNode* right;
}treeNode;
//按照层序遍历构造二叉树
//假设层序序列已经存进vector中,并且是一颗完全二叉树
treeNode* creatBinTree(vector<int> arr) {
queue<treeNode*> q;
//如果层序序列为空,返回空树
if (arr.empty()) {
return nullptr;
}