/*
问题描述:给出一棵二叉树,返回其中序遍历
来源:LintCode
作者:syt
*/
问题描述:给出一棵二叉树,返回其中序遍历
来源: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;
}
*/