問題描述
給定一個二叉樹的 根節點 root,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
bfs樹的層次遍歷
同其他的一些題,使用for迴圈區分該層的結點,並記錄每層的最後一個結點為答案即可。
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> res;
queue<TreeNode*> q;
if (root != nullptr) {
q.push(root);
}
while(!q.empty()) {
int layer_size = q.size();
for (int i = 0; i < layer_size; i++) {
TreeNode* t = q.front();
q.pop();
if (t->left) {
q.push(t->left);
} if (t->right) { // 這裡不能else if 要考慮左右子節點同時存在的情況
q.push(t->right);
}
if (i == layer_size-1) {
res.push_back(t->val);
}
}
}
return res;
}
};