剑指 Offer 32 从上到下打印二叉树I、II、III

I

在这里插入图片描述

菜鸡思路:

数组的层次遍历,放到数组里即可。

菜鸡代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<int> levelOrder(TreeNode* root) {
    
    
        vector<int> result;
        queue<TreeNode*> que;
        if(root != NULL) {
    
    
            que.push(root);
        }
        while(!que.empty()) {
    
    
            int size = que.size();
            for(int i = 0; i < size; i++) {
    
    
                TreeNode* node = que.front();
                que.pop();
                result.push_back(node->val);
                if(node->left != NULL) {
    
    
                    que.push(node->left);
                }
                if(node->right != NULL) {
    
    
                    que.push(node->right);
                }
            }
        }
        return result;
    }
};

II

在这里插入图片描述

菜鸡思路:

虽然还是层次遍历,但是要求分层返回,有些棘手,那么可以这样,每次判断一下一层有几个,然后针对性返回该层。

菜鸡代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> result;
        queue<TreeNode *> que;
        if (root) {
    
    
            que.push(root);
        }
        while (que.size()) {
    
    
            vector<int> row;
            int size = que.size();
            //记录下这一层有几个
            for (int i = 0; i < size; ++i) {
    
    
            //针对每层的节点数分层操作
                TreeNode *node = que.front();
                que.pop();
                row.push_back(node->val);
                if (node->left) {
    
    
                    que.push(node->left);
                }
                if (node->right) {
    
    
                    que.push(node->right);
                }
            }
            result.push_back(row);
        }
        return result;
    }
};

III

在这里插入图片描述

菜鸡思路:

虽然还是层次遍历、分层返回,但是要求的是要针对性的对一些层倒序,直接在上一题代码改造,判断一下是第几层,偶数层则数组倒序。只比上一题多了一个if条件块。

菜鸡代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
    
    
        vector<vector<int>> result;
        queue<TreeNode *> que;
        if (root) {
    
    
            que.push(root);
        }
        while (que.size()) {
    
    
            vector<int> row;
            int size = que.size();
            for (int i = 0; i < size; ++i) {
    
    
                TreeNode *node = que.front();
                que.pop();
                row.push_back(node->val);
                if (node->left) {
    
    
                    que.push(node->left);
                }
                if (node->right) {
    
    
                    que.push(node->right);
                }
            }
            if (result.size() % 2) {
    
    
                reverse(row.begin(), row.end());
            }
            result.push_back(row);
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_52192405/article/details/124521982
今日推荐