扫码加入训练营

牢记核心词

学习得礼盒

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

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

  遍历非递归算法

  1.前序遍历二叉树的非递归算法

  算法思路:设一存放结点指针的栈S。从根开始,每访问一结点后,按前序规则走左子树,但若该结点右子树存在,则右子指针进栈,以便以后能正确地遍历相应放回到该右子树上访问。

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

  { BTptr p;stacktype s;

  Clearstack(s);

  push(s,T); //置栈S为空、根指针T进栈//

  while (!Emptystack(s) )

  { p=pop(s); //出栈,栈顶=>P//

  while (p)

  {

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

  if (p–>Rchild) push(s,p–>Rchild); //右子存在时,进栈//

  p=p–>Lchild;

  } //向左走//

  }

  }

  说明:内部循环是从P结点出发一直走到最左,走的过程中保存了每一个右子树的地址,(因为右子树还没有被访问)而且是先进后出的,即先保存的比后保存的更先被用作返回地址,所以是用栈。外循环正好是当内部循环不下去的时候,退一栈的情形。即换成他的右子树

  2.中序遍历二叉树的非递归算法

  算法思路:同前序遍历,栈S存放结点指针。对每棵子树(开始是整棵二叉树),沿左找到该子树在中序下的第一结点(但寻找路径上的每个结点指针要进栈),访问之;然后遍历该结点的右子树,又寻找该子树在中序下的第一结点,..….直到栈S空为止。

考研公开课小程序

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

考研英语核心词汇营

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

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

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

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

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

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