[剑指offer]从上到下打印二叉树III——按之字形顺序打印二叉树

    技术2022-07-11  89

    [剑指offer]从上到下打印二叉树III——按之字形顺序打印二叉树

    剑指offer-从上到下打印二叉树III

    题目描述

    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

    例如:

    给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [20,9], [15,7] ]

    提示: 节点总数 <= 1000

    解题思路
    在剑指offer-从上到下打印二叉树II基础上,加一个flag,用于判断是否反转数组。使用reverse()函数进行反转。
    实现代码
    class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>>res; queue<TreeNode*> que; que.push(root); bool flag = false;//标志位,起初不反转,为false while(!que.empty()){ vector<int>list; int num = que.size();//队列大小代表这一层有几个节点 while(num--){ TreeNode* temp = que.front();//获得队列头节点 que.pop(); if(temp){//节点不为null时 list.push_back(temp->val);//节点值保存 que.push(temp->left);//左子树入队 que.push(temp->right);//右子树入队 } } if(flag)//为true时反转 reverse(list.begin(),list.end()); flag = !flag;//取反 if(!list.empty())//list有可能是[] res.push_back(list); } return res; } };
    Processed: 0.008, SQL: 9