扫码加入训练营

牢记核心词

学习得礼盒

计算机考研:数据结构常用算法精析(6)

2013-12-11 14:35:35来源:新东方在线编辑

  算法步骤如下:

  ①若二叉树T=∧(空树),返回,算法终止;

  ②初始化:置栈S空,根指针T=>p;

  ③反复以下过程,直到p=∧且栈S=∧时算法终止:

  若p≠∧,(p,o)进栈,p=p–>Lchild (遍历左子树) ,……,直到 p=∧;出栈, 栈顶=>(p, tag);若tag=0,(p,1)进栈,p=p–>Rchild(遍历右子树),否则,访问p结点,并置p=∧。

  算法描述:void postorder-1(BTptr T) //后序非递归遍历二叉树T//

  {

  int tag; BTptr p; stype sdata;

  Clearstack (s); // 置栈空 //

  p=T;

  do {

  while (p)

  {

  sdata.q=p; sdata.tag=0;

  push (s, sdata); // (p,0)进栈//

  p=p–>Lchild; //遍历p之左子树//

  }

  sdata=pop(s); //退栈

  p=sdata.q; //取指针

  tag=sdata.tag;//状态位//

  if (tag= =0)//从左子树返回时,根的tag=0

  {

  sdata. q=p;

  sdata.tag=1; //这时要进入根的右子树了,所以将根的tag=1,

  //下次碰到根时就可以访问了

  push(s,sdata); // (p,1) 进栈,根还得进一次栈

  p=p–>Rchild; //遍历右子树//

  }

  else //tag=1,这时说明右子树访问完了后返回,所以这次要对根访问了

  {

  visit(p); //访问p结点//

  p=NULL;//要再退到上层,因为该棵树已经彻底访问完了

  } //之所以把p=null是不让他进入while

  }while ( p|| !Emptystack(s));

  }

考研公开课小程序

本文关键字: 计算机 考研 数据结构

考研英语核心词汇营

背词+听课+练习+督学,学习得礼盒

更多资料
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料