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

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

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

解题思路、

用两个栈

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

代码

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

        while(!stack1.empty()||!stack2.empty()){
            vector 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;
    }
};

你可能感兴趣的:(剑指Offer-按之字形顺序打印二叉树)