二叉树的中序遍历

/*
问题描述:给出一棵二叉树,返回其中序遍历
来源:LintCode
作者:syt

日期:2017-7-9

思路:中序遍历,先访问左子树,访问节点,访问右子树,对于递归形式比较简单,非递归的形式,要用一个栈存访问到的节点

#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

template <typename T>
class tnode
{
public:
	T nodeValue;
	tnode<T> *left, *right;

	tnode(){ }
	tnode(const T& item, tnode<T> *lptr = NULL, tnode<T> *rptr = NULL)
	{
		nodeValue = item;
		left = lptr;
		right = rptr;
	}
};
//中序遍历(递归)
template <typename T>
void inorderOutput(tnode<T> *t, const string& separator = " ")
{
	if (t != NULL)
	{
		inorderOutput<T>(t->left, separator);
		cout << t->nodeValue << separator;
		inorderOutput<T>(t->right, separator);
	}
}
//中序遍历(非递归)
template <typename T>
vector<T> inorderOut(tnode<T>* root)
{
	//if (root == NULL)
	//	return ;
	tnode<T>* p = root;
	tnode<T>* max = root;
	stack<tnode<T>*> stack;
	vector<T> res;

	while (p != NULL || !stack.empty())
	{
		while (p != NULL)
		{
			stack.push(p);
			p = p->left;
		}
		if (!stack.empty())
		{
			p = stack.top();
			stack.pop();
			//cout << p->nodeValue << endl;
			//if (p->nodeValue > max->nodeValue)
			//	max = p;
			res.push_back(p->nodeValue);
			p = p->right;
		}
	}
	
	return res;
}

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值