1. 程式人生 > >面試題61:按之字形順序列印二叉樹

面試題61:按之字形順序列印二叉樹

      題目:請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

     其實這題和之前的60題其實差不多,完全可以獲得的正序的部分再逆序,但書上介紹了另一種方法,就按書上的寫了。

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<int> vect;  
        vector<vector<int> > v;  
        if(pRoot == NULL)  
            return v;    
        stack<TreeNode*> s1;
        stack<TreeNode*> s2;

        s1.push(pRoot);
        TreeNode *temp=NULL;
        while(!s1.empty() || !s2.empty())
        {
            while(!s1.empty())
            {
                temp = s1.top();
                s1.pop();
                if(temp->left)
                    s2.push(temp->left);
                if(temp->right)
                    s2.push(temp->right);
                vect.push_back(temp->val);
            }
            v.push_back(vect);
            vect.resize(0);
            while(!s2.empty())
            {
                temp = s2.top();
                s2.pop();
                if(temp->right)
                    s1.push(temp->right);
                if(temp->left)
                    s1.push(temp->left);
                 vect.push_back(temp->val);
            }
            if(vect.size() != 0)
                v.push_back(vect);
            vect.resize(0);
        }
        return v;
    }
    
};