链接:https://leetcode.com/problems/binary-tree-right-side-view/
题目:返回每一层的最右节点。
思路:层次遍历,每次统计当前层的节点个数(cur_low)和下一层的节点个数(next_low),当cur_low ==1 时,找到一个最右节点,然后更新cur_low(cur_low = next_low)。
代码:
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int>ret;
queue<TreeNode *>Q;
int cur_low = 1;
int next_low = 0;
Q.push(root);
while(!Q.empty()&&Q.front()){
TreeNode *t = Q.front();
if(cur_low == 1) ret.push_back(t->val); //找到一个最右节点
if(t->left) Q.push(t->left),next_low++;
if(t->right) Q.push(t->right),next_low++;
cur_low--;
if(cur_low == 0) { //换到下一层
cur_low = next_low;
next_low = 0;
}
Q.pop();
}
return ret;
}
};