//二叉树层次遍历 借助队列实现
bool isCBT(node* root) {
if (root) {
queue<node*>que;
que.push(root);
bool isLeaf = false;
while (que.size()) {
node* p = que.front();
que.pop();
//如果左子树不存在 右子树存在 返回false
if (!p->lchild && p->rchild) {
return false;
}
//左子树不为空 而右子树为空 说明之后节点都为叶子节点
if (p->lchild && !p->rchild) {
//若isLeaf状态已经开启 而该节点不是叶子节点 返回false
if (isLeaf) {
return false;
}
isLeaf = true;
que.push(p->lchild);
}
//左右子树都为空 说明之后节点都为叶子节点
else if (!p->lchild && !p->rchild) {
isLeaf = true;
}
//左右子树都不空
else {
que.push(p->lchild);
que.push(p->rchild);
}
}
return true;
}
return false;
}
判断完全二叉树---C++实现
最新推荐文章于 2024-07-23 20:38:48 发布