199. 二叉树的右视图(C++)---BFS解题

前言


  BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。目的是系统地展开并检查图中的所有节点,以找寻结果。


题目详情 

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---


——题目难度:中等

 


 

大致思路
使用宽度优先搜索,将每层最后一个节点的val保存在结果数组ans中。
 

                       红色结点自上而下组成答案,边缘以访问顺序标号。(来源: 力扣(LeetCode) )       

 


-下面代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
	if(!root) return {};
		
		vector<int> ans; //ans用来存储所需的节点值 
		queue<TreeNode*> que; //创建一个队列que 
		que.push(root); //在队尾(此时是最前位置)插入root 

	//BFS		
	while(!que.empty()){ //如果队列为空返回true,为空也说明已经遍历完整棵树了 
		int count = que.size(); //用que.size()函数返回每一层的节点数 
		for(int i=0;i<count;i++)
		{
			auto node = que.front(); //auto node可进行自动类型判断,node接受队列que中的第一个元素 
			que.pop(); //将队列que中最前面位置的元素去除 
			if(node->left) que.push(node->left); //如果node->left不为NULL则让node->left加入队列 
			if(node->right) que.push(node->right); //如果node->right不为NULL则让node->right加入队列
			if(i==count-1) ans.push_back(node->val); //i==count-1, 则此时node为每一层最后一个节点,则使之加入结果数组 
		}
	}	
	
	return ans;
    }
};

 

 



 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重剑DS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值