题解 | #从上往下打印二叉树#

从上往下打印二叉树

http://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701

第十六题 前面之字形的简单版本 利用队列的层序遍历
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    vector<int> PrintFromTopToBottom(TreeNode* root) {
        // 之前我用到过 层序遍历 之字形那题 直接拿了来修改
        
        // 层序遍历 按层 存入返回的结果
        vector<int> ans;
        // 边界问题
        if(root == NULL)
            return ans;
        
        // 用于层次遍历 保存后续结点的队列
        queue<TreeNode *> p;
        // 第一次先把根节点放进去
        p.push(root);
        
        // 层次遍历 如果队列不是空,则继续往下遍历
        while( !p.empty() ){
            // 相比之字形 每层都需要其他处理 要计算每一层有多少个结点 这里不需要
            // 弹出队列首个结点
            TreeNode* thisnode = p.front();
            p.pop();
            
            // 将该结点的值 保存到ans中
            ans.push_back(thisnode->val);
            
            // 将该结点的左右结点保存到队列 让他后面可以继续向下面的层访问
            if(thisnode->left!=NULL)
                p.push(thisnode->left);
            if(thisnode->right!=NULL)
                p.push(thisnode->right);
        }
        return ans;
    }
};
题解 文章被收录于专栏

一遍做剑指offer 一边保存做题步骤 并附带详细注释哦

全部评论

相关推荐

vegetable_more_exercise:1-1.5万,没错啊,最少是1人民币,在区间内
点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务