判断完全二叉树&&二叉树补充知识

判断一棵树是否为完全二叉树

如何判断一颗树是否是完全二叉树呢?

根据完全二叉树最后一层节点数量范围判断完全二叉树是不可靠的, 因为完全二叉树最后一层从左到右要求是连续的~

正确判断方法:层序遍历

如果是完全二叉树,那么当遍历遇到空节点之后,后面就没有非空节点了~

而非完全二叉树,那么当遍历遇到空节点之后,后面还有非空节点

 层序遍历前面博客已经分享过了,核心就在于要借助队列,上一层出队列时带下一层进队列~

代码实现

//判断完全二叉树
bool BTreeComplete(BTNode* root)
{
	Queue q;
	QueueInit(&q);
	if (root)
	{
		QueuePush(&q, root);
	}

	//该循环作用就是找到空节点
	while (!QueueEmpty(&q))
	{
		BTNode* front = QueueFront(&q);
		QueuePop(&q);
		//遇到空就跳出
		if (front == NULL)
		{
			break;
		}
		QueuePush(&q, front->left);
		QueuePush(&q, front->right);
	}

	//该循环检查后面的节点有没有非空
	//有非空,就不是完全二叉树
	while (!QueueEmpty(&q))
	{
		BTNode* front = QueueFront(&q);
		QueuePop(&q);
		if (front)
		{
			QueueDestroy(&q);
			return false;
		}
	}
	QueueDestroy(&q);
	//前面代码走完了都没有return,说明第一个空节点之后的节点均为空节点~
	return true;
}

二叉树补充知识

补充一:

结论:任何一棵非空二叉树如果度为0的节点个数为n0,度为2的节点个数为n2,则 n0 = n2+1

理解:

例1:

叶子节点就是度为0的节点,直接用结论,选B

例2:

解答:

总节点数 = n0+n1+n2 = 2n

因为 n0 = n2 + 1

所以 n0+n1+n0-1 = 2n  =>   2n0+n1-1 =2n

右边是偶数,且完全二叉树中n1只能是1或0,因此n1 = 1

推出n0 = n

*推论:偶数个节点的完全二叉树度为1的节点有1个,奇数个节点的完全二叉树度为0的节点有0个

补充二

题型:根据前序和中序或者根据后序和中序构建完全二叉树,然后就可以求出另外一种遍历顺序了~

技巧:前序和后序确定根,中序划分左右区间,前序正着看,后序倒着看

eg:

解答:

如果题上给的是后序和中序,方法类似,注意这时确定根的时候后序时是倒着看的~

本篇博客就分享到这了,二叉树也就暂告一段落了,接下来要分享的是各大排序算法,欲知后事如何,且听下回解说~

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值