/判断一个树是否为完全二叉树
//思路:当一个只要有一个结点只有右孩子,没有左孩子,直接返回false;
//当一个结点不是左右孩子都全的时候:
//左右都全
//有左没右或者左右都没有:当是这种情况的时候,遍历剩下的结点都要是叶节点
按层遍历
typedef class TreeNode
{
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) { this->val = x; right = NULL; left = NULL; }
}*Tree;
bool Is(Tree head)
{
bool leaf = false;
queue<Tree>q;
q.push(head);
while (!q.empty())
{
head = q.front();
if (leaf && (head->left != NULL || head->right != NULL)
|| head == NULL && head->right != NULL)
return false;
if (head->left != NULL);
q.push(head->left);
if (head->right != NULL)
q.push(head->right);
else//后续进入叶结点情况判断
leaf = true;
q.pop();
}
}
判断一个树是否为完全二叉树
最新推荐文章于 2022-09-02 22:37:06 发布