扫码加入训练营

牢记核心词

学习得礼盒

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

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

  例题:假设二叉树采用链式存储结构进行存储,root^为根结点,p^为任一给定的结点,

  写出求从根结点到p^之间路径的非递归算法。

  [题目分析]采用后序非递归遍历二叉树,栈中保留从根结点到当前结点的路径上所有结点。

  void PrintPath(BiTree bt,p) //打印从根结点bt到结点p之间路径上的所有结点

  {

  BiTree q=bt,s[]; //s是元素为二叉树结点指针的栈,容量足够大

  int top=0; tag[];//tag数组元素值为0或1,访问左、右子树标志,tag和s同步

  if (q==p)

  { printf(q->data);

  return;

  } //根结点就是所找结点

  while(q!=null || top>0)

  {

  while(q!=null) //左子女入栈,并置标记

  if(q==p) //找到结点p,栈中元素均为结点p 的祖先

  { printf(“从根结点到p结点的路径为\n”);

  for(i=1;i<=top;i++)

  printf(s[i]->data);

  printf(q->data);

  return;

  }

  else

  { s[++top]=q;

  tag[top]=0;

  q=q—>lchild;

  } //沿左分支向下

  while(top>0 && tag[top]==1))

  top--;//本题不要求输出遍历序列,这里只退栈

  if (top>0)

  { q=s[top];

  q=q->rchild;

  tag[top]=1;

  } //沿右分支向下

  }//while(q!=null || top>0)

  }//结束算法PrintPath

  按层次遍历二叉树

考研公开课小程序

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

考研英语核心词汇营

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

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

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

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

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

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