题目描述:
Given a binary tree, determine if it is a complete binary tree.
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
Example 1:
Input: [1,2,3,4,5,6] Output: true Explanation: Every level before the last is full (ie. levels with node-values {1} and {2, 3}), and all nodes in the last level ({4, 5, 6}) are as far left as possible.
Example 2:
Input: [1,2,3,4,5,null,7] Output: false Explanation: The node with value 7 isn't as far left as possible.
Note:
- The tree will have between 1 and 100 nodes.
class Solution {
public:
bool isCompleteTree(TreeNode* root) {
int height=get_height(root);
if(height<=1) return true;
bool result=true;
preorder_traverse(root, result, 1, height);
return result;
}
void preorder_traverse(TreeNode* node, bool& result, int cur_level, int height)
{ // 不用考虑最后一层节点,对于倒数第二层节点,不能有左节点为空,右节点不为空的情况
// 对于其它层节点,必须左右节点都不为空
if(node==NULL) return;
if(cur_level==height-1)
{
if(node->left==NULL&&node->right!=NULL) result=false;
return;
}
else
{
if(node->left==NULL||node->right==NULL)
{
result=false;
return;
}
else
{
preorder_traverse(node->left,result,cur_level+1,height);
preorder_traverse(node->right,result,cur_level+1,height);
}
}
}
int get_height(TreeNode* root)
{
if(root==NULL) return 0;
else return max(get_height(root->left),get_height(root->right))+1;
}
};