汽车营销服务网站建设,怎样申请微信公众号个人,无版权视频素材网站,dede做的网站弹广告与正常的非递归中序遍历算法不同于两点#xff1a;
一 比正常的中序遍历算法多了对数据元素的标记。 在压数据元素入栈#xff08;标记记为0#xff0c;用来表示访问了其左子树#xff09;时标记#xff0c; 还有访问完左子树利用gettop#xff08;#xff09;获取双亲…与正常的非递归中序遍历算法不同于两点
一 比正常的中序遍历算法多了对数据元素的标记。 在压数据元素入栈标记记为0用来表示访问了其左子树时标记 还有访问完左子树利用gettop获取双亲通过pp-rchild进一步访问右子树标记为1表示访问了该数据元素的 右子树时标记。
二 在访问完左子树时中序遍历会pop出该元素利用pop出数据访问右子树。而后序遍历在遍历完右子树之后才会pop 出该元素并访问其数据中间的过程是利用getTop函数实现的 void postOrderNoRe(BiTree T) //后续遍历非递归算法
{BiTree p;Stack *st;initstack(st);pT;int Tag[20]; //栈用于标识从左0或右1返回 while (p!NULL || !isempty(st)){while (p!NULL){push(st,p);Tag[st-top]0;pp-lchild;}while (!isempty(st)Tag[st-top]1){//注意这里使用的是while也就是说不停循环把栈里连续标记为1的节点都输出来//通过上面的函数访问完右子树之后才会访问该节点的数据//所以这个输出函数必须放在这里下面的函数用来由访问左子树转//为访问其右子树。而上面的函数用来判断右子树是否访问结束ppop(st);coutp-data ;}if (!isempty(st)){pgettop(st);pp-rchild;Tag[st-top]1; //设置标记右子树已经访问 }else break;}
}