剑指offer58-按之字形打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:两个栈,父节点保存一个栈,从右到左输入,从左到右输出,孩子节点在另一个栈,从左到右输入,从右到左输出;
    vector<vector<int> > Print(TreeNode* pRoot) {
        
            vector<vector<int>>res;
            if(pRoot==NULL) return res;
            stack<TreeNode*>q1;
            stack<TreeNode*>q2;
            q1.push(pRoot);
            while(!q1.empty()||!q2.empty())
            {
                vector<int>r;
                while(!q1.empty())
                {
                    TreeNode*p=q1.top();
                    r.push_back(p->val);
                    q1.pop();
                    if(p->left) q2.push(p->left);
                    if(p->right) q2.push(p->right);

                }
                res.push_back(r);
                r.clear();
                bool flag=false;
                while(!q2.empty())
                {
                    flag=true;
                    TreeNode*p=q2.top();
                    r.push_back(p->val);
                    q2.pop();
                    if(p->right) q1.push(p->right);

                    if(p->left) q1.push(p->left);
                }
                if(flag)
                res.push_back(r);
            }
            return res;
    }
 
原文地址:https://www.cnblogs.com/trouble-easy/p/12988437.html