【剑指 offer】分行从上往下打印二叉树

1、题目描述

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印,每一层打印到一行。

样例

输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
  8
  / \
12 2
    /
  6
  /
4
输出:[[8], [12, 2], [6], [4]]

2、问题描述:

  • 分层打印,二叉树。

3、问题关键:

  • 在每层的最后做个标记,每次遍历到标记就换行。
  • 队列,压入当前层所有值后,再压入一个NULL标记一下。
  • 如果当前层遍历完,把当前层的值加入结果中,清空数组。

4、C++代码:

class Solution {
public:
    vector> printFromTopToBottom(TreeNode* root) {
        vector> res;
        if (!root) return res;
        queue q;
        q.push(root);//压入第一层。
        q.push(nullptr);//压入标记。
        vector level;
        while(q.size()) {
            auto t = q.front();
            q.pop();
            if(t) {//如果不是标记,就把值加入 数组。
                level.push_back(t->val); 
                if(t->left) q.push(t->left);//把左右孩子加入。
                if (t->right) q.push(t->right);
            }
            else {//遇到标记。
                if (level.size()) {//判断数组是否为空,为空说明遍历完了,break就可以了。
                    res.push_back(level);//把当前层加入结果中。
                    q.push(nullptr);给下一层最后加个标记。
                    level.clear();//清空数组,遍历下一层。
                }
                else 
                    break;
            }
        }
        return res;
    }
};

你可能感兴趣的:(【剑指 offer】分行从上往下打印二叉树)