带你快速刷完67道剑指offer

No22、从上往下打印二叉树

牛客网原题链接

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

示例1

输入

{5,4,#,3,#,2,#,1}

返回值

[5,4,3,2,1]

1、迭代做法,借助队列,比较简单

    vector<int> PrintFromTopToBottom(TreeNode* root) {

    vector<int> result;
    if (root == nullptr) return result;
    queue<TreeNode*>  q;
    q.push(root);
    TreeNode* node;
    while (!q.empty()) {
        node = .front();
        result.push_back(node->val);
        if (node->left) q.push(node->left);
        if (node->right) q.push(node->right);
        q.pop();
    }
    return result;
    }

二刷:

1、借助队列来做,简单

运行时间:2ms 占用内存:528k

    vector<int> PrintFromTopToBottom(TreeNode* root) {
        if(root == nullptr) return vector<int>();
        queue<TreeNode*>q;
        q.push(root);
        TreeNode *node = nullptr;
        vector<int> result;
        while(!q.empty()){
             
            node = q.front();
            q.pop();
            result.push_back(node->val);
            if(node->left) q.push(node->left);
            if(node->right) q.push(node->right);
        }
        
        return result;
    }