有一棵二叉树,请设计一个算法判断它是否是完全二叉树。
给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class CheckCompletion { public: bool chk(TreeNode* root) { queue<TreeNode*> qu;//处理数据队列 qu.push(root); TreeNode* temp = root; while(!qu.empty()){ TreeNode* cur = qu.front();//队头节点 qu.pop(); if(cur->left){ qu.push(cur->left); temp = cur->left; } if(cur->right){ qu.push(cur->right); temp = cur->right; if(cur->left == NULL) return false;//结点有右孩子但没有左孩子,返回false } if(cur == temp){ if(cur->left || cur->right) return false; } } return true; } };