中序遍历非递归算法演示.ppt
《中序遍历非递归算法演示.ppt》由会员分享,可在线阅读,更多相关《中序遍历非递归算法演示.ppt(59页珍藏版)》请在冰豆网上搜索。
intNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化SABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ASABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ASABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ACBSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ACBSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ACBSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ACBSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGCintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGCintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGCintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递归算法栈的变化ABSABDCFEGCintNInorderTraverse(BiTree&T,int(*visit)(chare)InitStack(S);Push(S,T);/根指针入栈根指针入栈while(!
StackEmpty(S)/在树不空的情况下在树不空的情况下while(GetTop(S,p)&p)Push(S,p-lchild);/向左走到头向左走到头Pop(S,p);/空指针退栈空指针退栈if(!
StackEmpty(S)Pop(S,p);/元素出栈元素出栈if(!
visit(p-data)returnERROR;Push(S,p-rchild);/右子树入栈右子树入栈returnOK;/NInOrderTraverse中序遍历二叉树非递归算法栈的变化中序遍历二叉树非递