二叉树的4种非递归遍历

目录

1.用队列实现层序遍历(判断是否为完全二叉树)

1.实现层序遍历

2.判断二叉树是否为完全二叉树

 2.二叉树的前序遍历(非递归)

3.二叉树的中序遍历(非递归)

4.二叉树的后序遍历(非递归)


1.用队列实现层序遍历(判断是否为完全二叉树)

1.实现层序遍历

void LevelOrder(BTNode* root)
{
	Queue q;//创建一个队列,
	QueueInit(&q);//队列初始化

	if (root)
	{
		QueuePush(&q, root);//将头节点入队列
	}

	while (!QueueEmpty(&q))//队列不为空,则继续
	{
		BTNode* front = QueueFront(&q);
		QueuePop(&q);//节点出队列

		printf("%d ", front->data);
		if (front->left)//左孩子进队列
		{
			QueuePush(&q, front->left);
		}

		if (front->right)//右孩子进队列
		{
			QueuePush(&q, front->right);
		}
	}

	printf("\n");
	QueueDestory(&q);//销毁队列
}

2.判断二叉树是否为完全二叉树

思想:用队列实现层序遍历,孩子为NULL也进队列,当出队列的元素是NULL时,把后面所有元素都出队列。若后面元素都为空,即是完全二叉树,若不是,则非完全二叉树。2

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)//队列出元素,若是NULL,则break,后面把所有元素出队列
			break;

		QueuePush(&q, front->left);
		Queu
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值