数据结构 第章 树形结构2.ppt

数据结构 第章 树形结构2

3. 后序遍历非递归算法 (2)第二种方法(常规方法) 由后遍历过程可知,采用一个栈保存需要返回的结点指针,先扫描根结点的所有左结点并一一进栈,出栈一个结点*b即当前结点,然后扫描该结点的右孩子结点并入栈,再扫描该右孩子结点的所有左结点并入栈。当一个结点的左右孩子结点均访问后再访问该结点,如此这样,直到栈空为止。 难点:如何判断一个结点*b的右孩子结点已访问过,为此用p保存刚刚访问过的结点(初值为NULL),若b-rchild==p成立(在后序遍历中,*b的右孩子结点一定刚好在*b之前访问),说明*b的左右子树均已访问,现在应访问*b。 void PostOrder2(BTNode *b) { BTNode *St[MaxSize];BTNode *p; int flag,top=-1; //栈指针置初值 do { while (b!=NULL) //将*b的所有左结点进栈 { top++; St[top]=b; b=b-lchild; } p=NULL; //p指向栈顶结点的前一个已访问的结点 flag=1; //设置b的左孩子为已访问过 找最左下结点 while (top!=-1 flag==1) {

文档评论(0)

1亿VIP精品文档

相关文档