数据结构——二叉树(层序遍历)

本文介绍了二叉树的层序遍历算法,并详细阐述了如何通过层序遍历来判断一棵二叉树是否为完全二叉树。完全二叉树的定义、特点及判断方法均在文中有所涉及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.层序遍历一棵二叉树

思路如图:

代码:

//对二叉树进行层序遍历
void levOrder(Tree* root) {
	
	if (root == NULL) {
		return;
	}
	//根结点入队
	//打印根节点,根节点出队
	//根节点的左右非空孩子入队
	std::queue <Tree*> queue;
	queue.push(root);
	while (!queue.empty()) {
		Tree* front = queue.front();
		queue.pop();
		printf("%c  ", front->val);
		if (front->left) {
			queue.push(front->left);
		}
		if (front->right) {
			queue.push(front->right);
		}
	}
}

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

完全二叉树:倒数第二层结点数达到该层结点的最大数,最后一层叶子节点均在上层节点的左子树。

也是层序遍历的应用:

 

所以与层序不同的只是需要将空结点也入队。

代码:

//判断二叉树是否是完全二叉树
bool isComplete(Tree* root) {
	//将空结点也入队,最后判断队内有没有非空元素即可,
	std::queue <Tree*> q;
	q.push(root);
	while (true) {
		Tree* front = q.front();
		q.pop();
		//如果队首第一次为空,就退出循环
		if (front == NULL) {
			break;
		}
		//将空结点也入队
		q.push(front->left);
		q.push(front->right);
	}
	//将队内进的空结点出队,判断是否还有没有非空结点
	//若有,则表明不是完全二叉树
	//没有,则表明是完全二叉树
	while (!q.empty()) {
		Tree* front = q.front();
		q.pop();
		if (front != NULL) {
			return false;
		}
	}
	return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值