题解 | #判断是不是完全二叉树#

判断是不是完全二叉树

https://www.nowcoder.com/practice/8daa4dff9e36409abba2adbe413d6fae

方法:BFS,辅助队列

本质是广度优先搜索,利用辅助队列进行层序遍历。

如果一个二叉树是完全二叉树,那么层序遍历时,第一个空结点也是它的最后一个空结点;否则就不是完全二叉树。

时间复杂度:o(n)。最坏情况需要遍历二叉树的所有结点。

空间复杂度:o(n)。需要辅助队列进行二叉树的层序遍历

class Solution {
  public:
    queue<TreeNode*> res;
    bool isCompleteTree(TreeNode* root) {
        if (root == nullptr)
            return true;
        res.push(root);
        //层间遍历第一个结点为空的标志
        bool flag = false;
        while (!res.empty()) {
            int length = res.size();
            for (int i = 0; i < length; i++) {
                TreeNode* cur = res.front();
                if (cur == nullptr) {
                    flag = true;
                } else {
                    //如果第一个空节点后还有不为空的节点,则不是完全二叉树
                    if (flag == true)
                        return false;
                    res.push(res.front()->left);
                    res.push(res.front()->right);
                }
                res.pop();
            }
        }
        return true;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务