/* 后序遍历二叉树 思路: 1,若当前结点没有左右孩子,则访问并出栈 2,若当前结点有左孩子或右孩子,并且孩子被访问过,则访问并出栈(若当前结点有左右孩子,只要有一个孩子已被访问,那么它的两个孩子都已被访问,这与入栈顺序有关,它的孩子在栈中一定在它的上方) 3,若当前结点有左孩子或右孩子,并且都没有被访问,那么先将右孩子入栈,再将左孩子入栈 */ void beh_Order(BiTree T) { InitStack(S); BiTree pCur,pPre=NULL,p; Push(s,T); while(!IsEmpty(S)){ pCur = getTop(stack); if((pCur->lchild==NULL && pCur->rchild==NULL) || (pPre!=NULL && (pCur->lchild==pPre || pCur->rchild==pPre))) { visit(pCur); Pop(stack,p); pPre = pCur; } else { if(pCur->rchild != NULL) Push(stack,pCur->rchild); if(pCur->lchild != NULL) Push(stack,pCur->lchild); } } }
时间: 2024-10-11 22:50:38