设计一个方法判断是否为完全二叉树
时间: 2023-12-14 09:47:05 浏览: 81
判断是否为完全二叉树
4星 · 用户满意度95%
判断一棵二叉树是否为完全二叉树可以按照以下步骤进行:
1. 对于一棵二叉树,对其进行层序遍历(即按照从左到右、从上到下的顺序),将所有遍历到的节点按照遍历顺序标号,从1开始标号。
2. 如果该二叉树为完全二叉树,则按照层序遍历的顺序,节点的标号应该依次为1, 2, 3, ..., n(n为节点总数)。
3. 如果该二叉树不是完全二叉树,则节点的标号不满足上述条件。
4. 通过判断节点的标号是否满足上述条件,即可判断一棵二叉树是否为完全二叉树。
实现代码如下:
```
bool isCompleteTree(TreeNode* root) {
if (root == nullptr) return true;
queue<TreeNode*> q;
q.push(root);
int count = 1;
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
if (node == nullptr) break;
q.push(node->left);
q.push(node->right);
count++;
}
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
if (node != nullptr) return false;
}
return count == pow(2, log2(count));
}
```
该代码的时间复杂度为O(n),空间复杂度为O(n)。其中,n为节点总数。
阅读全文