# 199 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
字节跳动半年内考察14次
思路:
- 二叉树每层最右侧节点,显然想到了按层遍历。
- STL队列queue。
- 队列的末尾就是每层的最右侧节点。
代码:
/**
* 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> rightView;
if(!root) return rightView;
//层序遍历
queue<TreeNode*> node;
node.push(root);
//rightView.push_back(root->val);
//直到队列为空
while(!node.empty()){
//记录当前层的宽度
int length = node.size();
//将本层最右侧节点数值储存起来。
rightView.push_back(node.back()->val);
for(int i = 0; i<length; i++){
//取队首元素,将其左右子节点进队
TreeNode* front = node.front();
if(front->left) node.push(front->left);
if(front->right) node.push(front->right);
//弹出队首元素
node.pop();
}
}
return rightView;
}
};
结果
执行结果:通过
执行用时 : 4 ms, 在所有 C++ 提交中击败了 82.69% 的用户
内存消耗 : 11.9 MB, 在所有 C++ 提交中击败了 9.09% 的用户