剑指Offer-按之字形顺序打印二叉树

题目描述 [按之字形顺序打印二叉树]

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

解题思路、

用两个栈

  • 奇数层从左到右:先左节点后右节点入栈1
  • 偶数层从右到左:先右节点后左节点入栈2

代码

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int> > res;
        if(!pRoot) return res;
        stack<TreeNode*> stack1;
        stack<TreeNode*> stack2;
        stack1.push(pRoot);

        while(!stack1.empty()||!stack2.empty()){
            vector<int> temp;
            if(!stack1.empty()){
                while(!stack1.empty()){
                    TreeNode *p = stack1.top();
                    temp.push_back(p->val);
                    stack1.pop();
                    if(p->left) stack2.push(p->left);
                    if(p->right) stack2.push(p->right);
                }
            }else if(!stack2.empty()){
                while(!stack2.empty()){
                    TreeNode *p = stack2.top();
                    temp.push_back(p->val);
                    stack2.pop();
                    if(p->right) stack1.push(p->right);
                    if(p->left) stack1.push(p->left);
                }
            }
            res.push_back(temp);
        }
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容