题解 | #把二叉树打印成多行#

把二叉树打印成多行

https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <queue>
#include <vector>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pRoot TreeNode类
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > Print(TreeNode* pRoot) {
        // write code here
        vector <vector<int>> level_arr;
        if (pRoot == nullptr) {
            return level_arr;
        }

        std::queue<TreeNode*> q;
        q.push(pRoot);

        TreeNode *cur_node;
        while (q.size() > 0) {

            int level_nums = q.size();
            vector<int> level(level_nums);
            // 将当前层中元素依次出队,
            for (int i = 0; i < level_nums; ++i) {
                cur_node = q.front();
                level[i] = cur_node->val;
                q.pop();

                if (cur_node->left) {
                    q.push(cur_node->left);
                }
                if (cur_node->right) {
                    q.push(cur_node->right);
                }
            }
            level_arr.emplace_back(level);
        }
        return level_arr;
    }
};

二叉树的层次遍历是一个比较经典的使用queue的场景;

  1. 将root 入队
  2. 获取队头的元素,放入vector中,然后出队,同时将元素的孩子节点入队
  3. 循环2,直到队列中没有元素为止

这道题的返回值不是一个数组, 而是一个2D vector,因此需要再队里的访存和存储上做一下改变;

需要将每个层次中的元素都保存到一个vector<int>上;

如果区分队列中的层次呢? 这是一个很好地问题

----------- 修改如下:

  1. 将root 入队
  2. 判断队列是否为空
  3. 获取队列的数量(level_nums), 遍历当前队列中的元素; 遍历方式如下:
  4. 新建vector, 统计访问的次数 count
  5. 每次获取队头的元素,放入vector中: vec[i] = cur_node->val
  6. 将对头元素出队
  7. 将对头元素的左右子节点入队
  8. 重复 b,c,d 直到 count = level_nums
  9. 将step3中的vector追加到vector中,
  10. 重复 2,3,4 直到队列中元素为空
note_coding 文章被收录于专栏

记录自己的解题思路, 欢迎评价

全部评论

相关推荐

27双非本,最近面试被挂麻了面试官说简历内容太简单了,技术栈要单独一行,各位佬有啥建议吗
LZStarV:项目太简单了,你像用什么开发的技术栈没必要写一句话,按点写就好了;有特色的比如说WebSocket、视频流这种狠狠吹,那就好看多了
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务