一种巧妙的判断完全二叉树的方法

从博客https://blog.csdn.net/guoqingshuang/article/details/79825860看到的,觉得不错。

void judge() {//一种巧妙的判断完全二叉树的方法
    queue<node *> que;
    que.push(root);
    node *q;
    while(!que.empty())
    {
        q=que.front();
        que.pop();
        if(q != NULL) {
            que.push(q->lchild);
            que.push(q->rchild);
        }
        if(q == NULL)
            break;
        cnt++;
    }
}

用队列将二叉树层次遍历一遍,同时用cnt记录出队的节点的个数。如果某节点孩子为NULL也正常入队,在出队过程中如果出队了一个NULL就返回,然后看记录的cnt值是否等于树中节点总数,如果等于,说明遍历过程中没有由于入队了空节点而使遍历提前退出,即是完全二叉树(不存在某一层节点中夹杂着空节点的情况)。

猜你喜欢

转载自blog.csdn.net/m0_37663482/article/details/88575340