今天同学面试,问到一个题,判断一个树是否是完全的,他说简单,可是我觉得又不是那么容易,难道我真的这么渣么,好吧,慢慢进步吧,自己写的,感觉挺对的。
下面是代码
//Tree.h
#ifndef TREE_H
#define TREE
struct TreeNode{
TreeNode *left;
TreeNode *right;
int val;
TreeNode(int);
};
#endif
//tree.cpp
#include<iostream>
#include "Tree.h"
TreeNode::TreeNode(int v):left(NULL),right(NULL),val(v){}
//main.cpp
#include<iostream>
#include "tree.h"
#include<queue>
using namespace std;
bool isCompleteTree(TreeNode *root){
if(root == NULL){
return true;
}
queue<TreeNode *> q;
q.push(root);
bool end = false;
while(!q.empty()){
TreeNode * node = q.front();
q.pop();
if(node->left && !end){
q.push(node->left);
}else if(!end && node->left == NULL){
end = true;
}else if(end && node->left){
return false;
}
if(!end && node->right){
q.push(node->right);
}else if(!end && node->right == NULL){
end = false;
}else if(end && node->right ){
return false;
}
}
return true;
}
int main(){
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
//root->right->left = new TreeNode(10);
//root->left->left = new TreeNode(4);
// root->left->right = new TreeNode(5);
//root->right->right = new TreeNode(6);
cout << isCompleteTree(root)<<endl;
}
今天感觉 GeeksforGeeks听不错的。
上面的代码有不对或者 不标准的地方,指正一下各位。