leetcode 二叉树的完全性检验 中等

Posted Wh1t3zZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 二叉树的完全性检验 中等相关的知识,希望对你有一定的参考价值。

 

 

使用 bfs 按照完全二叉树的定义进行判定即可。

第一点:每到新的一层时,判断上一层节点数量是否与与其一致。并初始化新一层的结点数量等 tag 意义变量

第二点:用一个变量 tag 来表示当前层到目前为止是否出现过某个儿子为空的情况,如果 bfs 的当前节点儿子存在,并且 tag 为 true,就表示前面镂空,返回false

class Solution {
public:
    bool isCompleteTree(TreeNode* root) {
        if(!root) return true;
        int nowDep = 1, nowNums = 0;
        queue<pair<TreeNode*, int>> que;
        que.push({root, 1});
        // nHeightNums 表示每一层应该出现的节点数量
        // tag 表示某一层前面是否出现过空掉的情况
        int nHeightNums = 1, tag = false;
        while(!que.empty()) {
            auto front = que.front(); que.pop();
            if(front.second == nowDep) ++ nowNums;
            else {
                if(nowNums != nHeightNums) return false;
                nowNums = 1;
                nHeightNums *= 2;
                tag = false;
            }

            if(front.first -> left) {
                if(tag) return false;
                que.push({front.first -> left, front.second + 1});
            } else tag = true;

            if(front.first -> right) {
                if(tag) return false;
                que.push({front.first -> right, front.second + 1});
            } else tag = true;

            nowDep = front.second;
        }
        return true;
    }
};

 

以上是关于leetcode 二叉树的完全性检验 中等的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode-958 Check Completeness of a Binary Tree(二叉树的完全性检验)

958. 二叉树的完全性检验

leetcode刷穿二叉树

LeetCode Java刷题笔记—222. 完全二叉树的节点个数

leetcode-中等-队列-二叉树的层次遍历

精选力扣500题 第71题 958. 二叉树的完全性检验c++/java详细题解