二叉树的之字形层序遍历
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的之字形层序遍历相关的知识,希望对你有一定的参考价值。
二叉树的之字形层序遍历
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
//BFS 保存当前层节点数,下一层节点数,及之字形是否需要逆序标记
vector<vector<int> > zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root == nullptr)
return res;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
vector<int> levelRes;
int needReverse = -1;
int curLevelNum = 1;
int nextLevelNum = 0;
while(!nodeQueue.empty())
{
TreeNode* node = nodeQueue.front();
levelRes.push_back(node->val);
--curLevelNum;
if(node->left)
{
nodeQueue.push(node->left);
++nextLevelNum;
}
if(node->right)
{
nodeQueue.push(node->right);
++nextLevelNum;
}
if(curLevelNum == 0)
{
if(needReverse == 1)
{
reverse(levelRes.begin(), levelRes.end());
}
res.push_back(levelRes);
needReverse *= -1;
levelRes.clear();
curLevelNum = nextLevelNum;
nextLevelNum = 0;
}
nodeQueue.pop();
}
return res;
}
};
以上是关于二叉树的之字形层序遍历的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 149. 直线上最多的点数 / NC14 二叉树的之字形层序遍历 / NC37 合并区间
LeetCode每天一题Binary Tree Zigzag Level Order Traversal(二叉树的之字形遍历)