方法一:BFS

  • 题目很简单,从上往下层层遍历并打印节点值即可,用一个队列来存储节点,遍历打印当前节点的值,并将子节点入队。
    class Solution {
    public:
      vector<int> PrintFromTopToBottom(TreeNode* root) {
          queue<TreeNode*> q;
          vector<int> ans;
          if(root==nullptr)
              return {};
          q.push(root);
          while(!q.empty()){
              TreeNode* cur=q.front();
              q.pop();
              ans.push_back(cur->val);
              if(cur->left)
                  q.push(cur->left);
              if(cur->right)
                  q.push(cur->right);
          }
          return ans;
      }
    };

    图解如下:

    图片说明
    图片说明
    图片说明
    图片说明
    图片说明
    图片说明

    复杂度分析:

    时间复杂度:O(n),n为节点数目,遍历每个节点一次。
    空间复杂度:O(n),与每层节点数目的最大值相关,满二叉树的情况下,最大值为(n+1)/2。