二叉树

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

2019-04-13  本文已影响0人  邓泽军_3679

1、题目描述

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

样例

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

2、问题描述:

3、问题关键:

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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读