牛客——按之字型顺序打印二叉树

题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题解:
1,奇数行从左到右,偶数行从右到左
2,打印顺序为A CB DEFG KJIH LM
3,定义一个栈,保存当前层结点
4,定义一个队列,对于栈顶指针,奇数行保存左右子结点,偶数行保存右左子结点
在这里插入图片描述

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        stack<TreeNode*> S;
        queue<TreeNode*> Q;
        S.push(pRoot);
        TreeNode* tmp;
        vector<vector<int> > array;//所有层结点值顺序
        vector<int> line_val;//每层结点值顺序
        int line = 1;//标记奇偶层
        
        if (pRoot==NULL)
            return array;
        
        while (!S.empty())
        {
            line_val.clear();
            while (!S.empty())
            {
                tmp = S.top();
                S.pop();
                line_val.push_back(tmp->val);
                if (line % 2 != 0)
                {
                    if (tmp->left)
                        Q.push(tmp->left);
                    if (tmp->right)
                        Q.push(tmp->right);
                }
                else
                {
                    if (tmp->right)
                        Q.push(tmp->right);
                    if (tmp->left)
                        Q.push(tmp->left);
                }
            }
            while (!Q.empty())
            {
                S.push(Q.front());
                Q.pop();
            }
            line += 1;
            array.push_back(line_val);
        }
        return array;
    }
};
发布了315 篇原创文章 · 获赞 119 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/w144215160044/article/details/104941807
今日推荐