中序遍历比前序要稍微复杂些,我也先用手写理出思路
代码写的和书上的一比。。。感觉麻烦了好多,但毕竟是自己理的思路不容易忘,所以还是贴自己的
void inOrder_stack(BiTree T){ printf("\n非递归中序遍历结果:\n"); initStack(&sqStack); BiTree p=T,l;//l用于保存上次的输出 push(&sqStack,p); while(!stackEmpty(sqStack)){ getTop(&sqStack,&p); if(p->lchild!=NULL&&p->lchild!=l){ push(&sqStack,p->lchild); } else { pop(&sqStack,&l); printf("%d ",l->data); if(l->rchild!=NULL){ push(&sqStack,l->rchild); } else if(l->rchild==NULL){ if(!stackEmpty(sqStack)){ pop(&sqStack,&l); printf("%d ",l->data); if(l->rchild!=NULL){ push(&sqStack,l->rchild); } } } } } }
原文地址:https://www.cnblogs.com/otaganyuki/p/9774662.html
时间: 2024-10-08 10:03:47