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

示例:

输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---

解题思路:

层次遍历。每一层找最右边的结点即可,如果是在作出也可以找每一层的第一个结点。算法的复杂度为O(n)。

                 Leetcode:199.二叉树的右视图

C++代码
class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int> res;
        //层次遍历,每次取最右端的元素
        queue<TreeNode*> Q;
        if(root) Q.push(root);
        while (!Q.empty()) {
            int size = Q.size();//查找第size个元素
            TreeNode* temp;
            for (int i = 1; i <= size; i++) {
               temp = Q.front();
               if(temp->left) Q.push(temp->left);
               if(temp->right) Q.push(temp->right);
               Q.pop();
               if (i == size) res.push_back(temp->val);//如果是左侧,就改为i==1
            }
        }
        return res;
    }
};

 

相关文章: