二叉树的右视图

原题:

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

示例:

  1. 输入: [1,2,3,null,5,null,4]
  2. 输出: [1, 3, 4]
  3. 解释:
  4. 1 <---
  5. / \
  6. 2 3 <---
  7. \ \
  8. 5 4 <---

解题方法:

解法一:

  1. class Solution {
  2. public:
  3. vector<int> res;
  4. vector<int> rightSideView(TreeNode* root) {
  5. if(!root) return {};
  6. queue<TreeNode*> que;
  7. que.push(root);
  8. while(!que.empty())
  9. {
  10. int size=que.size(); //必须单独拿一个size变量记录size,因为que.size()是动态变化的
  11. res.push_back(que.back()->val);
  12. for(int i=0;i<size;i++)
  13. {
  14. TreeNode* node=que.front();
  15. que.pop();
  16. if(node->left) que.push(node->left);
  17. if(node->right) que.push(node->right);
  18. }
  19. }
  20. return res;
  21. }
  22. };

做题小结:

针对解法一:

  1. 一定要注意单独使用一个size变量,因为使用que.size()的话,它的值会随子节点的push而变化