面试题61:按之字形顺序打印二叉树

来源:互联网 发布:网络借贷监管法学 编辑:程序博客网 时间:2024/06/01 08:27

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

     其实这题和之前的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;    }    };

0 0
原创粉丝点击