Leetcode199二叉树右视图[C++题解]:BFS+层数
文章目录
- 题目
- 思路
- 提交代码(ac代码)
- 测试代码
题目
Leetcode199二叉树右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,5,4,5,6]
输出: [1, 5, 6]
解释:1 <---/ \
2 5 <---
/ \ \
4 5 6 <---
思路
层次遍历二叉树,也就是广度优先搜索BFS
这里需要做的是如何把每一层最后一个元素进行标记。
我们把节点和它所在的层数组在一起同时入队列Q。
queue<pair<TreeNode*,int> > Q;
然后可以求解层数的问题
提交代码(ac代码)
/*** 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){vector<int> view;//save the resultqueue<pair<TreeNode*,int> > Q;if(root)Q.push(make_pair(root,0));//root and its level 0while(!Q.empty()){TreeNode* node=Q.front().first;//current nodeint depth=Q.front().second;//level of the nodeQ.pop();if(view.size()==depth)//每行第一个 view.push_back(node->val);elseview[depth]=node->val;//每行只存一个,不断更新 if(node->left)Q.push(make_pair(node->left,depth+1));if(node->right)Q.push(make_pair(node->right,depth+1)); }return view;}
};
测试代码
#include<iostream>#include<vector>#include<queue>using namespace std;struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeNode(int x):val(x),left(NULL),right(NULL){} };vector<int> rightSideView(TreeNode* root){vector<int> view;//save the resultqueue<pair<TreeNode*,int> > Q;if(root)Q.push(make_pair(root,0));//root and its level 0while(!Q.empty()){TreeNode* node=Q.front().first;//current nodeint depth=Q.front().second;//level of the nodeQ.pop();if(view.size()==depth)//每行第一个 view.push_back(node->val);elseview[depth]=node->val;//每行只存一个,不断更新 if(node->left)Q.push(make_pair(node->left,depth+1));if(node->right)Q.push(make_pair(node->right,depth+1)); }return view;}int main(){TreeNode a(1);TreeNode b(2);TreeNode c(5);TreeNode d(3);TreeNode e(4);TreeNode f(6);a.left=&b;a.right=&c;c.right=&f;b.left=&d;b.right=&e;vector<int> test;test=rightSideView(&a);for(size_t i=0;i<test.size();++i)cout<<test[i]<<"";return 0;}
测试结果
Leetcode199二叉树右视图[C++题解]:BFS+层数相关推荐
- 牛客题霸 [输出二叉树的右视图] C++题解/答案
牛客题霸 [输出二叉树的右视图] C++题解/答案 题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 题解: 分两个过程: 先用前序遍历+中序遍历恢复二叉树,这个应该都会. ...
- 二叉树的左视图和右视图
所谓二叉树的左视图,是指打印从左方向看到的二叉树. 根据前序遍历算法思想,在左视图代码中先遍历左子树在遍历左子树,这样在判断level == len(stack)时,先遍历左子树则保证层数与数组长度相 ...
- 二叉树的左视图和右视图 形象理解(附C++代码)
定义 二叉树的左(右)视图即:以从上到下的顺序,输出一颗二叉树每一层最左(右)端的节点,结果就是其左(右)视图. 步骤 采用递归的方式,将二叉树的所有节点连带其深度信息存入动态数组(若对二叉树的递归遍 ...
- LeetCode-笔记-199. 二叉树的右视图——BFS广度优先搜索
LeetCode-笔记-199. 二叉树的右视图 199. 二叉树的右视图 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 输入: [1,2,3,n ...
- [Leedcode][JAVA][第199题][二叉树的右视图][BFS][DFS][前中后序遍历]
[问题描述]199.二叉树的右视图 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值.示例:输入: [1,2,3,null,5,null,4] 输出: [1, ...
- Leetcode-199二叉树的右视图(二叉树左视图)
题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 输 ...
- 创建二叉树的代码_解二叉树的右视图的两种方式
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 问题分析 这题说的很明白,就是站在一棵二叉树的右边,你所能看到的结点值.对于二叉树的遍历,前面有简单 ...
- Python打印二叉树的左视图、右视图
先求出二叉树的最大深度,然后求出每一层的节点列表,求每一层节点列表就相当于求距离根节点指定深度的所有节点,再将每一层的节点列表中的最左或最右节点打印出来,或者添加到新列表中,就是二叉树的左视图.右视图 ...
- 199. 二叉树的右视图
199. 二叉树的右视图: 题目链接 :199. 二叉树的右视图 题目: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值 思路: BFS( ...
最新文章
- python爬取岗位数据并分析_区块链岗位薪资高,Python爬取300个区块链岗位分析,龙虎榜出炉...
- 设计模式之迭代子模式
- 弹窗在大屏上居中对齐,在小屏上被挡住解决方案
- jzoj3794,P1383-高级打字机【欧拉序,离线O(n)】
- Win7中多账户设置自动登录的图文方法
- 2019牛客暑期多校训练营(第三场) B-Crazy Binary String
- matlab脑肿瘤识别与分割程序_车牌识别算法
- HDU-----(4858)项目管理(模拟)
- 32. Magento log()方法
- 【Zigbee】进阶篇(2) Zigbee协议栈中OSAL的执行流程
- gitlab发邮件收不到
- 去美国看展会1:办理护照和签证
- (深入篇)漫游语音识别技术—带你走进语音识别技术的世界
- 2023 年大淘宝 Web 端技术概览
- djfpvpdjfpvp耐高温计算机电缆,电缆DJFPVP DJFPVP耐高温计算机电缆
- 火车票改签退票规则,儿童票规则
- win10使用FFmpeg录屏/录音
- maya为什么不能导出fbx_maya的模型导出为OBJ,然后导入到3dmax后uv全乱了 (导出FBX更不行,导出的FBX文件放max里面基本没面了)...
- 西方经济学微观部分中的英文字母缩写
- 不小心删除了ubuntu的内核,进不去系统和Biss,解决办法。