美文网首页
剑指offer 31- 不分行从上往下打印二叉树

剑指offer 31- 不分行从上往下打印二叉树

作者: 顾子豪 | 来源:发表于2021-05-20 10:11 被阅读0次

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

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

输出:[8, 12, 2, 6, 4]

分析:
从根节点开始按宽度优先的顺序遍历整棵树,每次先扩展左儿子,再扩展右儿子。

先扩展根节点;
再依次扩展根节点的左右儿子,也就是从左到右扩展第二层节点;
再依次从左到右扩展第三层节点;
依次类推

所以BFS的顺序就是这道题目要求的顺序。

时间复杂度
BFS时每个节点仅被遍历一次,所以时间复杂度是 O(n)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> printFromTopToBottom(TreeNode* root) {
        /*
            考察广度优先遍历
        */
        vector<int> res;
        queue<TreeNode*> que;
        if (!root) return res;
        que.push(root);
        while (que.size()) {
            auto x = que.front();
            res.push_back(x->val);
            que.pop();
            if(x->left) que.push(x->left);
            if(x->right) que.push(x->right);
        }
        return res;
    }
};

相关文章

网友评论

      本文标题:剑指offer 31- 不分行从上往下打印二叉树

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