美文网首页二叉树
【剑指 offer】分行从上往下打印二叉树

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

作者: 邓泽军_3679 | 来源:发表于2019-04-13 14:12 被阅读0次

    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<vector<int>> printFromTopToBottom(TreeNode* root) {
            vector<vector<int>> res;
            if (!root) return res;
            queue<TreeNode*> q;
            q.push(root);//压入第一层。
            q.push(nullptr);//压入标记。
            vector<int> 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】分行从上往下打印二叉树

        本文链接:https://www.haomeiwen.com/subject/khwlwqtx.html