void InOrderTraverse(BT bt,void (*function)(BT))
{
Stack s = newStack();
BT tbt = bt;
while(!isEmpty(s)||tbt)
{
if(tbt)
{
Push(s,tbt);
tbt=tbt->LT;
}
else
{
tbt=Pop(s);
function(tbt);
tbt=tbt->RT;
}
}
}
void InOrderTraverse(BT bt , void(*fp)(BT))
{
Stack s = newStack();
BT tbt=bt;
while(!isEmpty(s)||tbt)
{
while(tbt)
{
Push(s,tbt);
tbt=tbt->LT;
}
fp(tbt=Pop(s));
tbt=tbt->RT;
}
}
主要的思路就是
遍历压左子树入栈 -> 栈顶元素出栈被访问
(1) -> 如果栈顶元素有右节点入栈 -> 遍历压左子树入栈
(2)-> 如果栈顶元素无右节点 栈顶元素出栈被访问