二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)

Posted 码农指南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)相关的知识,希望对你有一定的参考价值。

描述:
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
例如:
给定的二叉树如下
在这里插入图片描述
该二叉树之字形层序遍历的结果是
[
[3],
[20,9],
[15,7]
]

示例1
输入:
{1,#,2}
返回值:
[[1],[2]]
(题目来自牛客网)

用C++实现如下

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        //思路,和二叉树的层序遍历一样,添加一个bool变量来控制从左到右或者从右到左的方向
        //解题思路,定义两个vector变量分别用来存当前层和下一层的节点,再根据bool变量判断是否反转即可
        if(root == NULL)
            return {};
        vector<TreeNode*> v1 = {root};
        bool reverse = false;            //标志位,用于处理之字形
        vector<vector<int>> res;         //存放结果
        while(!v1.empty())
        {
            vector<int> tmp;             //存放一层层的val结果,每次进行初始化操作,保证存储是当前层的val值
            vector<TreeNode*> next;      //存放每一层的节点结果,每次进行初始化操作,保证存储的是当前层的下一层
            for(auto& it : v1)           //每次遍历完一层的结果,把val值push到tmp中
            {
                tmp.push_back(it->val);
                if(it->left != NULL)
                    next.push_back(it->left);
                if(it->right != NULL)
                    next.push_back(it->right);
            }
            if(reverse)                  //如果遇到需要反向的,则先将存放val值的tmp的vector先reverse之后再push到res中去
            {
                std::reverse(tmp.begin(),tmp.end());
                res.push_back(tmp);
            }else{
                res.push_back(tmp);
            }
            reverse = !reverse;          //每次相反
            v1 = next;                   //保持当前排下一排的结果
        }
        return res;
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

以上是关于二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章

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

二叉树的之字形层序遍历

求二叉树的层序遍历(NC15/考察次数Top6/难度中等)

NC15 求二叉树的层序遍历

按之字形顺序打印二叉树

输出二叉树的右视图(NC136/考察次数Top40/难度中等)