从上往下打印二叉树

题目

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

解答——queue

使用queue的话,操作就是pop()push()
push() 始终在队列后面插入一个元素
pop() 始终在队列的前面删除一个元素
front() 返回队列前面的元素的值

/*
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> que;  //新建一个数组
        queue<TreeNode*>q;  //新建一个队列
        TreeNode* fr;  // 新建一个树结点
        if(root==NULL)  //当root为空时,返回一个空的数组
            return que;
        q.push(root);  //把root放入队列
        while(!q.empty())  //当队列不为空时
        {
            fr=q.front(); //fr等于队列的第一个元素
            que.push_back(fr->val);  //数组中存放第一个元素的值
            if(fr->left!=NULL)  //如果左结点不为空
                q.push(fr->left);  //放入队列
            if(fr->right!=NULL) //如果右结点不为空
                q.push(fr->right);  //放入队列
            q.pop(); //因为第一个元素已经赋值给了fr,所以弹出第一个元素
        }
        return que;
    }
};

解答——deque

使用deque的话,操作就是push_back()pop_front()

push_back() 把元素放到队列的末尾
pop_front() 弹出队列的第一个元素

/*
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> que;  //新建一个数组
        deque<TreeNode*>q;  //新建一个队列
        TreeNode* fr;  // 新建一个树结点
        if(root==NULL)  //当root为空时,返回一个空的数组
            return que;
        q.push_back(root);  //把root放入队列
        while(!q.empty())  //当队列不为空时
        {
            fr=q.front(); //fr=队列的第一个元素
            que.push_back(fr->val);  //数组中存放第一个元素的值
            if(fr->left!=NULL)  //如果左结点不为空
                q.push_back(fr->left);  //放入队列
            if(fr->right!=NULL) //如果右结点不为空
                q.push_back(fr->right);  //放入队列
            q.pop_front(); //因为第一个元素已经赋值给了fr,所以弹出第一个元素
        }
        return que;
    }
};

参考

牛客网 从上往下打印二叉树 解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值