题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

// 树的各种遍历
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<int> vec;
    vector<vector<int> > v;
    int flag = 1;
    vector<vector<int> > Print(TreeNode* pRoot) {
        if(!pRoot)
            return v;
        zhiPrint(pRoot);
//         v.push_back(vec);
        return v;
    }
    // 建议先看前、中、后序遍历,在看层序遍历,最后看之字遍历

    // 之字遍历
    void zhiPrint(TreeNode* pRoot)
    {
        if(!pRoot)
            return;
        deque<TreeNode*> que;
        que.push_back(pRoot);
        int level = 1;
        while(!que.empty())
        {
            int len = que.size();
            vector<int> vec1;
            while(len--)
            {
                if(level%2)
                {
                    TreeNode* node = que.back();
                    vec1.push_back(node->val);
                    que.pop_back();
                    if(node->left)
                    {
                        que.push_front(node->left);
                    }
                    if(node->right)
                    {
                        que.push_front(node->right);
                    }
                }
                else
                {
                    TreeNode* node = que.front();
                    vec1.push_back(node->val);
                    que.pop_front();
                    if(node->right)
                    {
                        que.push_back(node->right);
                    }
                    if(node->left)
                    {
                        que.push_back(node->left);
                    }
                }
            }
            level++;
            v.push_back(vec1);
            vec1.clear();
        }
    }
    // 前序遍历
    void prePrint(TreeNode* pRoot)
    {
        if(pRoot)
        {
            vec.push_back(pRoot->val);
        }
        if(pRoot->left)
        {
            prePrint(pRoot->left);
        }
        if(pRoot->right)
        {
            prePrint(pRoot->right);
        }
    }
    // 中序遍历
    void midPrint(TreeNode* pRoot)
    {

        if(pRoot->left)
        {
            midPrint(pRoot->left);
        }
        if(pRoot)
        {
            vec.push_back(pRoot->val);
        }
        if(pRoot->right)
        {
            midPrint(pRoot->right);
        }
    }
    // 后序遍历
    void postPrint(TreeNode* pRoot)
    {
        if(pRoot->left)
        {
            postPrint(pRoot->left);
        }
        if(pRoot->right)
        {
            postPrint(pRoot->right);
        }
        if(pRoot)
        {
            vec.push_back(pRoot->val);
        }
    }
    // 层序遍历
    void levelPrint(TreeNode* pRoot)
    {
        queue<TreeNode*> que;
        if(!pRoot)
            return;
        que.push(pRoot);
        while(!que.empty())
        {
            TreeNode* tmp = que.front();
            que.pop();
            vec.push_back(tmp->val);
            if(tmp->left)
                que.push(tmp->left);
            if(tmp->right)
                que.push(tmp->right);
        }
    }
};
全部评论

相关推荐

05-12 18:24
长安大学 UE4
因为是家里第一代大学生,报专业报学校都没人可以指导,只能自己看着来毕业找工作,父母只知道考公务员啊考教师啊,丝毫不考虑难度我说要去大城市打工才行,小县城对学历没有需求,开的工资都很低,两三千养活不了的结果都不同意我去大城市,觉得北上广深远,不稳定,一年到头不着家,养这么大孩子算白养了要我怎么办,不考公不考编就是死路一条呗,出去打工就是不孝呗可是考公考编也好难,考上也是小职员,到时候又变成了家里第一代体制内了,不还是样样靠自己有时候很羡慕同学,要去大城市打拼,家里都很支持去看看外面的世界也羡慕同学父母都是体制内的,考上还有所依靠家里没有办法给予帮助,简直是进入死胡同一样
Two_Shadow:你先拿到offer,路是自己走的,你真去了谁拦得住你呢,不用给自己扣帽子,我也是我家第一代大学生啊,农村人,高考96个志愿我就填50多个计算机,爸妈让我填满保底我说我不,我就学计算机,上大学了让我考研我说我不考,我就喜欢干活,现在签了offer,他们也释怀,不回家就努力提升自己,就往家里打钱,就开视频,还能怎么样呢,路是自己走的,他们只是希望你能走得好一点,但大部分父母,尤其是农村父母根本帮不了你什么,难道你就不走路了吗,希望能骂醒你,不要想太多做太少。
点赞 评论 收藏
分享
04-21 11:22
已编辑
中华女子学院 UE4
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务