判断完全二叉树

根据《李春葆数据结构教程》书上的定义为:“二叉树中最多只有最下面两层的节点的度数小于二,并且最下面一层的叶子节点都依次排列在该层最左边的位置上,这样的二叉树称为完全二叉树”

特点:
 1. 叶子节点只可能在层次最大的两层上出现
 2. 对于最大层次中的叶子节点,都依次排列在该层的最左边的位置上

 3. 如果有度为一的叶子节点,只可能有一个,且该节点只有做左孩子而无右孩子

所以可以采用队列层次遍历的方法对二叉树进行广度优先遍历,如果遍历到空节点且后续遍历节点不为空则不是完全二叉树,否则就是


int Judge(BTNode *T)
{
	Queue *q;
	BTNode *t;
	Initqueue(q);
	Inqueue(q, T);
	while ((t = Outqueue(q)) != NULL)
	{
		Inqueue(q, t->lch);
		Inqueue(q, t->rch);
	}
	while (q->front != q->rear)
	{
		t = Outqueue(q);
		if (NULL != t)
		{
			return 0;
		}
	}
	return 1;
}


猜你喜欢

转载自blog.csdn.net/tron_future/article/details/51290111