二叉树的之字形层序遍历

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 合并区间

按之字形顺序打印二叉树

NC14 按之字形顺序打印二叉树

LeetCode每天一题Binary Tree Zigzag Level Order Traversal(二叉树的之字形遍历)

剑指offer JZ77 按之字形顺序打印二叉树

剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)