二叉树中序遍历

递归版本:

void _InOrderR(Node<T>* pRoot)
	{
		if (NULL == pRoot)//出口
			return;
		_InOrderR(pRoot->LC);//访问左子树
		cout << pRoot->data << " ";//访问结点
		_InOrderR(pRoot->RC);//访问右子树
	}

非递归版本:

void _InOrderNor(Node<T>* pRoot)
	{
		if (NULL == pRoot)
			return;
		stack<Node<T>*> s;//利用栈结构来保存结点
		Node<T>* pTmp = pRoot;
		//开始时栈为空,循环条件是为了能够进入循环
		while (NULL != pTmp || !s.empty())
		{
			while (pTmp)
			{
				//一直向左找到最左边的结点,保存路径上的所有节点
				s.push(pTmp);
				pTmp = pTmp->LC;
			}
			//访问栈顶的结点
			pTmp = s.top();
			s.pop();
			cout << pTmp->data << " ";
			//将该结点的右孩子看做一颗树,再次进行遍历,若右孩子不存在,
			//那么就进不去上面的while,就会去访问该节点之前的一个结点
			pTmp = pTmp->RC;
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值