https://leetcode-cn.com/problems/binary-tree-right-side-view/
我的方法一:二叉树的广度优先搜索
步骤:
- 使用队列q,push节点以及左右子节点,然后队列pop,顺序就是广度优先搜索
- 每层的最右边(队列最后一个节点,就是能够看到的节点值)
初始值
边界条件
- q先将root push进来
- 当root为空时,直接返回空vector
- q当没有节点时表示遍历了所有节点
复杂度
时间复杂度:O(N)
空间复杂度:最大O(N)(满二叉树),最小O(1),即每层只有1个节点等
代码
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> ret;
if(!root){
return ret;
}
queue<TreeNode*> q;
q.push(root);
TreeNode* cur = 0;
int count = 0;
while(!q.empty()){
count = q.size();
while(count > 0){
cur = q.front();
q.pop();
if(cur->left){
q.push(cur->left);
}
if(cur->right){
q.push(cur->right);
}
count--;
}
ret.push_back(cur->val);
}
return ret;
}
};
其他更好的办法
一般都时DFS或者BFS
BFS先push右边的节点
这样,队列第一个元素就是能看见的,而我的办法是队列最后一个元素是能看见的。虽然复杂度一样,但是这样更加简洁一些。
网友评论