1.非递归实现
template <typename T>
static void goAlongLeftBranch(BinNodePosi(T) x,stack<BinNodePosi(T) & s)
{
while(x){S.push(x);x=x->lchild;}//反复地入栈,沿左分支深入
}
template <typename T,typename V> void travIn I1(BinNodePosi(T) x,V& visit)
{
stack<BinNodePosi(T)> S;//辅助栈
while(true)
{
goAlongLeftBranch(x,s);//从当前结点出发,逐批入栈
if(S.empty()) break;//直至所有结点处理完毕
x=S.pop();//x的左子树或为空,或已经遍历
visit(x->data);//立即访问之
x=x->rchild;//再转向其右子树(可能为空,留意处理手法)
}
}