二叉树:完全二叉树判断c++
时间: 2023-06-27 17:07:04 浏览: 126
判断一棵二叉树是否为完全二叉树,可以通过层序遍历来实现。如果一个节点有右子树,但没有左子树,则不是完全二叉树;如果一个节点没有左子树或右子树,则其后面所有节点必须都是叶子节点,否则也不是完全二叉树。
以下是C++代码实现:
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(nullptr), right(nullptr){}
};
bool isCompleteTree(TreeNode* root) {
if(!root) return true;
queue<TreeNode*> q;
q.push(root);
bool end = false;
while(!q.empty()){
TreeNode* cur = q.front();
q.pop();
if(!cur){
end = true;
} else {
if(end) return false;
q.push(cur->left);
q.push(cur->right);
}
}
return true;
}
int main(){
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
cout << isCompleteTree(root) << endl; // 1
root->right->right = new TreeNode(7);
cout << isCompleteTree(root) << endl; // 1
root->left->left->left = new TreeNode(8);
cout << isCompleteTree(root) << endl; // 0
return 0;
}
```