方法如下:
1.树(子树)根节点入栈,但是不访问
2.左子树入栈,左子树的各子树依次入栈
3.当左子树为空时,出栈,访问根节点
4.根节点右子树入栈(新树入栈,按照步骤1里面那样继续处理)
5.当右子树为空时,出栈,访问祖先节点,将爷爷节点的右子树入栈(新树入栈,回到步骤1)
总之为:树入栈后一直朝左走(一路进栈),
走不动时出栈并访问节点。同时将该节点右子树入栈。
如果其右子树为空,就再出栈一个节点,访问,出栈节点右子树入栈
//p为指向树中各节点的指针。stack为存储树的各个节点的栈。
while( ! end_of(tree)){
if( p != NULL ){
push(stack , p)
p = p->Lchild;
}
else{
p = pop(stack);
process(p);
p = p->Rchild; }}
其中end_of()的判断条件可以为P != NULL || !empty(stack);