美文网首页
199. 二叉树的右视图-二叉树广度优先搜索

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

作者: gykimo | 来源:发表于2020-06-26 11:48 被阅读0次

    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右边的节点

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

    相关文章

      网友评论

          本文标题:199. 二叉树的右视图-二叉树广度优先搜索

          本文链接:https://www.haomeiwen.com/subject/umnyfktx.html