判断一棵树是否为满二叉树

首先,我们要知道什么是满二叉树。一个深度为k,节点个数为 2^k – 1 的二叉树为满二叉树。这个概念很好理解。

那么,我们要怎么判断一棵树是否为满二叉树呢?

思路:在层序遍历的过程中,找到第一个非满节点(non-full node)。满节点(full-node)指的是同时拥有左右孩子的节点。在找到第一个非满节点之后,剩下的节点不应该有孩子节点;如果有,那么该二叉树就不是完全二叉树。

<span style="font-size:18px;">bool isCompleteTree(Node* root){
    queue<Node*> que;  
    que.push(root);  
    bool flag = false; 
    while(!que.empty()){  
        Node* temp = que.front();  
        que.pop();  
        if(flag){  
            if(temp->left || temp->right)    // 
                return false;  
        }  
        else{  
            if(temp->left && temp->right)   //左右孩子同时存在,则压入队列
            {  
                que.push(temp->left);  
                que.push(temp->right);  
            }  
            else if(temp->right)   //如果只存在右孩子,则,一定不满足满二叉树
                return false;  
            else if(temp->left)  
            {  
                que.push(temp->left);  //改变标志位
                flag = true;  
            }  
            else  
                flag = true;  
        }  
    }  
    return true;  
}  </span>


网友还曾说,可以根据完全二叉树的定义,左边的深度>=右边的深度。从根节点开始,分别沿着最左最右分支下去,找到最左和最右的深度。如果左边比右边深1,再分别检查以左儿子和右儿子为根的两根树。但是尝试了几遍,感觉不对,但是,读者可以自己寻找。

    原文作者:满二叉树
    原文地址: https://blog.csdn.net/github_35124642/article/details/51744683
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞