二叉树的层序遍历
二叉树节点结构
struct TreeNode {
int val;
struct TreeNode* left, * right;
TreeNode() {
val = 0;
left = right = nullptr;
}
TreeNode(int x) :val(x) {
left = right = nullptr;
}
TreeNode(int x, struct TreeNode* leftnode, struct TreeNode* rightnode) :val(x), left(leftnode), right(rightnode) { }
};
层序遍历
/* * * * * 返回值为空 * * * * */
void LevelOrderVisit(TreeNode* root) {
if ( root == nullptr ) { // 空树
return ;
}
vector<TreeNode*> vec_0 = { root }; // 当前层节点
while (1) {
vector<TreeNode*> vec_1; // 下一层节点
for (auto i : vec_0) {
if (i->left != nullptr)
vec_1.push_back(i->left);
if (i->right != nullptr) {
vec_1.push_back(i->right);
}
cout << i->val << ' '; // 打印节点值
}
cout << endl;
if (vec_1.size() == 0) { // 下一层节点为空时跳出
break;
}
vec_0 = vec_1; // 下一层迭代
}
}
/* * * * * 返回每一层节点值 * * * * */
vector<vector<int> > LevelOrderVisit(TreeNode* root) {
vector<vector<int> > nodes; // 存储每一层节点值,并返回
vector<TreeNode*> vec_0 = { root }; // 当前层节点
while (1) {
vector<TreeNode*> vec_1; // 下一层节点
vector<int> cur; // 当前节点值
for (auto i : vec_0) {
if (i->left != nullptr)
vec_1.push_back(i->left);
if (i->right != nullptr) {
vec_1.push_back(i->right);
}
cur.push_back(i->val);
}
nodes.push_back(cur);
if (vec_1.size() == 0) { // 下一层节点为空时跳出
break;
}
vec_0 = vec_1; // 下一层迭代
}
return nodes;
}