199. 二叉树的右视图-二叉树广度优先搜索

2020-06-26  本文已影响0人  gykimo

https://leetcode-cn.com/problems/binary-tree-right-side-view/

我的方法一:二叉树的广度优先搜索

步骤:

  1. 使用队列q,push节点以及左右子节点,然后队列pop,顺序就是广度优先搜索
  2. 每层的最右边(队列最后一个节点,就是能够看到的节点值)

初始值

边界条件

  1. q先将root push进来
  2. 当root为空时,直接返回空vector
  3. 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右边的节点

这样,队列第一个元素就是能看见的,而我的办法是队列最后一个元素是能看见的。虽然复杂度一样,但是这样更加简洁一些。

上一篇下一篇

猜你喜欢

热点阅读