用非递归实现二叉树中序遍历

本文介绍了一种二叉树的中序非递归遍历算法,核心思想是利用栈来辅助遍历过程。首先将根节点及其左孩子入栈,当遇到没有左孩子时,出栈并打印栈顶元素,然后进入右孩子节点的遍历。通过这种方式,实现了对二叉树的有效遍历。

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

核心思想:将根节点和左孩子都入栈,没有左孩子就出栈顶元素打印,进右孩子,有右孩子就将右孩子(相当于根节点)和左孩子入栈。

void BinaryTreeInOrderNonR(BTNode* root)
{

	BTNode *cur = root;//root是根节点

	Stack st;

	StackInit(&st, 100);

	while (cur ||  !StackIsEmpty(&st))
	{
		for (; cur; cur->lchild)//遍历根结点和左孩子
		{
			StackPush(&st, cur);//入栈
		}

		cur = StackTop(&st);//没有左孩子,那么指向栈顶元素

		if (cur)
		{
			putchar(cur->data);//输出左孩子
			StackPop(&st);
			cur=cur->rchild;//遍历右孩子
		}
	}
	StackDestory(&st);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值