非递归中序遍历二叉树(图解)

来源:互联网 发布:骑士vs勇士第五场数据 编辑:程序博客网 时间:2024/06/01 10:33

本文参考:http://www.slyar.com/blog/bitree-unrecursion-c.html

为了加深记忆,将代码中的每一步操作弄成了PPT。图解如下,如有不当之处,还请指正。谢谢。

中序遍历:先访问左子树,再访问根节点,最后访问右子树。

设置一个栈,出栈即为访问节点。先将根节点的左节点全部进栈,然后出栈一个节点,访问。

将该节点的右孩子节点进栈,再将右孩子节点的所有左节点全部进栈...如此这般直到栈空为止。

代码如下:

void InOrderTraverse(BiTree T, Status (* visit)(ElemType e)){BiTree pStack[100];BiTree p;int top = -1;if(T != NULL){p = T;while(top > -1 || p != NULL){while(p != NULL){pStack[++top] = p;p = p->lchild;}if(top > -1){p = pStack[top--];visit(p->data);p = p->rchild;}}}}

运行步骤如下:

1.



2.


3.



4.



5.



6.



7.



8.



9.



10.



11.



12.



13.



14.



15.



16.



17.



19.



20.



21.



22.



23.



24.



25.



26.



27.



28.



29.



30.



31.



32.






原创粉丝点击