2019/11/19
二叉樹中序遍歷的非遞歸算法
void InOrder(BiTree T){ if(T!=NULL){ InOrder(T->lchild);//遞歸遍歷左子樹
visit(T); //訪問根節點
InOrder(T->rchild);//遞歸遍歷左子樹
} }
二叉樹中序遍歷的非遞歸算法
1 void InOrder2(BitTree T){ 2 //二叉樹中序遍歷的非遞歸算法,算法需要借助一個棧 3 InitStack(S); //初始化棧 4 BitTree p=T; //p是遍歷指針 5 while( p || !IsEmpty(S) ){ 6 if(p){ //根指針進棧,遍歷左子樹。 7 Push(S,p); //每遇到非空二叉樹先向左走。 8 p=p->lchild; 9 } 10 else{ //根指針退棧,訪問根節點,遍歷右子樹。 11 Pop(S,p); //退棧。 12 visit(p); //訪問根節點。 13 p=p->rchild; //再向右子樹走 14 } 15 } 16 }