《从头再来》剑指offer.32III 从上到下打印二叉树

Posted 欢迎来到我的酒馆,快找个位置随便坐!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《从头再来》剑指offer.32III 从上到下打印二叉树相关的知识,希望对你有一定的参考价值。

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

由于需要对偶数层的节点进行反向输出,所以我们想到借助双端队列来完成反向的操作。其他的操作和前两题没什么区别,主要的区别就是奇数层和偶数层对于双端队列来说入队的位置不同,不只入队的顺序不同,并且左右子节点的入队顺序也不同。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> result;
        if(root == nullptr) return result;

        //借助双端队列
        deque<TreeNode*>    deq;
        deq.push_back(root);//先将根结点加入队列
        int level_number = 2;//从第二层开始

        while(!deq.empty()){
            int count = deq.size();
            vector<int> level;
            while(count != 0){
                if(level_number%2 == 0){
                    //偶数层,从后取上层节点,然后将本层节点从前面压入(偶数层先压左节点)
                    TreeNode* node = deq.back();
                    level.push_back(node->val);
                    deq.pop_back();//从后取从后出队列
                    count--;
                    if(node->left != nullptr)   deq.push_front(node->left);
                    if(node->right != nullptr)  deq.push_front(node->right);
                }
                if(level_number%2 == 1){
                    //奇数层,从前取上层节点,然后将本层节点从后面压入(奇数层先压右节点)
                    TreeNode* node = deq.front();
                    level.push_back(node->val);
                    deq.pop_front();//从前取从前出队列
                    count--;
                    if(node->right != nullptr)  deq.push_back(node->right);
                    if(node->left != nullptr)   deq.push_back(node->left);
                }
            }
            level_number++;
            result.push_back(level);
        }
        return result;
    }
};

多画图理解一下偶数层和奇数层的入队方式。

《从头再来》

 

以上是关于《从头再来》剑指offer.32III 从上到下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

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

(重要)剑指 Offer 32 - III. 从上到下打印二叉树 III

剑指Offer打卡32-3. 从上到下打印二叉树III

剑指Offer打卡32-3. 从上到下打印二叉树III

LeetCode(剑指 Offer)- 32 - III. 从上到下打印二叉树 III

剑指 Offer 32 - III. 从上到下打印二叉树 III(medium) javascript解法