/*
* 完全二叉树概念要取别满二叉树
step: 1)若一结点有右孩子而无左孩子,则直接false
2)在第一个条件成立的情况下,若遇到了第一个左右孩子不双全,而后续的结点含有孩子,则false
*/
bool isCBF(Node* head) {
//如果一个结点既有左孩子又有右孩子就置为false,无双全就置为true
bool leaf = false;
Node* l = new Node;
Node* r = new Node;
queue<Node*> q;
q.push(head);
while (!q.empty()) {
Node* cur = q.front();
q.pop();
l = cur->left;
r = cur->right;
//如果前面已经出现过双不全,后面又出现有的结点有孩子就false;
//或者无左有右也false
if ((leaf) && (l != NULL || r != NULL) || (l == NULL && r != NULL))
return false;
if (l != NULL)
q.push(l);
if (r != NULL)
q.push(r);
if (l == NULL || r == NULL)
leaf = true;
}
return true;
}
判断是否为完全二叉树(CBT)(C++实现)
最新推荐文章于 2024-06-06 21:11:37 发布