剑指offer 53.按之字形顺序打印二叉树

  1. 题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
  2. 思路:
    1. 每一层的节点先看左节点有没有,再看右节点有没有,最后从左到右得到了这一层的节点
  3. 启发或者坑:
    1. 之字形打印,别忘记啦hh
  4. 代码:
    /*
    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<TreeNode*> lineNode;
                vector<TreeNode*> childNode;
                vector<int> line;
                vector<vector<int>> res;
                if (!pRoot)
                    return res;
                lineNode.push_back(pRoot);
                int lineNum = 1;
                while (!lineNode.empty()) {
                    line.clear();
                    childNode.clear();
                    for (int i = 0; i < lineNode.size(); i++){
                        line.push_back(lineNode[i]->val);
                        if (lineNode[i]->left)
                            childNode.push_back(lineNode[i]->left);
                        if (lineNode[i]->right)
                            childNode.push_back(lineNode[i]->right);
                    }
                    if (lineNum%2)
                        res.push_back(line);
                    else {
                       for (int i = 0; i < line.size()/2; i++) {
                           swap(line[i], line[line.size()-1-i]);
                       }
                       res.push_back(line);
                    }
                    lineNum++;
                    lineNode.assign(childNode.begin(), childNode.end());
                }
                return res;
            }
         
    };
发布了131 篇原创文章 · 获赞 5 · 访问量 7374

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104093719