【剑指offer】23 - 从上往下打印二叉树

题目描述
题目描述
  • 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。如下图所示二叉树:
    二叉树
  • 打印上图中二叉树的结果为:
8
6   10
5   7   9   11
  • 二叉树的节点定义如下:
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
解题思路
  • 针对于此题,题目要求按行打印,即我们需要层次遍历这棵树
  • 层次遍历树,使用队列数据结构,以层为单位进行入队,出队并打印
  • 按层打印上图二叉树的过程:
步骤 操作 队列
1 打印8 6、10
2 打印6 10、5、7
3 打印10 5、7、9、11
4 打印5 7、9、11
5 打印7 9、11
6 打印9 11
7 打印11

- 思路清晰后,我们就可以开始动手写代码了

代码实现
vector<int> PrintFromTopToBottom(TreeNode* root) 
{
    vector<int> res;
    if (root == NULL)
        return res;

    queue<TreeNode*> q;
    q.push(root);

    while (!q.empty())
    {
        TreeNode* tmp = q.front();
        q.pop();
        res.push_back(tmp->val);
        if (tmp->left != NULL)
            q.push(tmp->left);
        if (tmp->right != NULL)
            q.push(tmp->right);
    }
    return res;
}

猜你喜欢

转载自blog.csdn.net/Aurora_pole/article/details/81530746