王道5-3-7完全二叉树的判定

题目大意

给定一个二叉树,确定它是否是一个完全二叉树。

百度百科中对完全二叉树的定义如下:

若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)

示例 1:

输入:[1,2,3,4,5,6] 输出:true 解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/check-completeness-of-a-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

根据层序遍历,设置flag标志是否出现过null,如果出现null,设置flag为1.如果存在当前节点,判断当前flag如果是1,就直接返回false,不是就把他的左右节点加入(无论他的左右节点是否存在),接着层序。

代码实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    bool isCompleteTree(TreeNode* root) {
    
    
        if (root== nullptr){
    
    
        return true;
    }
    queue<TreeNode*> queue1;
    queue1.push(root);
    int flag=0;
//    是否出现null
    while (!queue1.empty()){
    
    
        TreeNode* cur=queue1.front();
        if (cur) {
    
    
            if (flag==1){
    
    
                

                return false;
            }

            queue1.push(cur->left);
            queue1.push(cur->right);
            queue1.pop();
        } else{
    
    
            queue1.pop();
            flag=1;
        }
    }
    return true;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42186444/article/details/107220744