1 完满二叉树
除了叶子结点之外的每一个结点都有两个孩子结点。
如下是完满二叉树
1
2 3
4 5
6 7
2 分析
我们按层(queue)遍历数,如果发现左子树为空右子树不为空 或者 左子树不为空右子树为空 的情况下直接返回false
3 代码实现
#include <iostream>
#include <queue>
using namespace std;
typedef struct Tree
{
int value;
struct Tree* left;
struct Tree* right;
Tree(int value):value(value), left(NULL), right(NULL){}
} Tree;
bool isFullCompleteTree(Tree* node)
{
if (NULL == node)
return false;
queue<Tree *> queue;
queue.push(node);
while (!queue.empty())
{
Tree* pNode = queue.front();
if ((pNode->left == NULL && pNode->right != NULL) || (pNode->left != NULL && pNode->right == NULL))
return false;
queue.pop();
if (pNode->left != NULL)
queue.push(pNode->left);
if (pNode->right != NULL)
queue.push(pNode->right);
}
return true;
}
int main()
{
Tree node1(1);
Tree node2(2);
Tree node3(3);
Tree node4(4);
Tree node5(5);
Tree node6(6);
Tree node7(7);
node1.left = &node2;
node1.right = &node3;
node2.left = &node4;
node2.right = &node5;
node5.left = &node6;
node5.right = &node7;
std::string res = "";
res = (isFullCompleteTree(&node1) == 1) ? "true" : "false";
std::cout << "Tree isFullCompleteTree is " << res << std::endl;
return 0;
}
4 运行结果
Tree isFullCompleteTree is true