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

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

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);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值