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

从上往下打印二叉树

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 一边保存做题步骤 并附带详细注释哦

全部评论

相关推荐

点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务