判断是否为完全二叉树代码
时间: 2024-06-21 20:02:19 浏览: 106
判断一棵二叉树是否为完全二叉树的方法有很多,以下是其中一种较为常见的方法:
1. 对于一颗二叉树,按照层次从上到下、从左到右的顺序进行编号,根节点编号为1,其它节点的编号为父节点编号乘2再加上1或2。
2. 对于编号为i的节点,若其有左儿子,则其左儿子的编号为2i;若其有右儿子,则其右儿子的编号为2i+1。
3. 遍历二叉树,若当前节点的编号为i,则:
- 若i=n,则这棵二叉树是完全二叉树;
- 若i>n,则这棵二叉树不是完全二叉树;
- 若i=n-1,则要判断其是否有左子树,若有则这棵二叉树是完全二叉树,否则不是。
以下是一个C++实现的代码示例:
```c++
bool isCompleteTree(TreeNode* root) {
if (root == nullptr) {
return true;
}
queue<pair<TreeNode*, int>> q;
q.emplace(root, 1);
int pre = 0;
while (!q.empty()) {
auto [node, idx] = q.front();
q.pop();
if (pre + 1 != idx) {
return false;
}
pre = idx;
if (node->left != nullptr) {
q.emplace(node->left, idx * 2);
}
if (node->right != nullptr) {
q.emplace(node->right, idx * 2 + 1);
}
}
return true;
}
```
阅读全文