知识大全 用栈实现二叉树先序遍历的非递归算法实践题

Posted 指针

篇首语:太斤斤计较的人,不适合恋爱,适合买菜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用栈实现二叉树先序遍历的非递归算法实践题相关的知识,希望对你有一定的参考价值。

  /*sy c*/

  #include

  #include

  typedef char DataType;

  typedef struct node

  DataType data;

  struct node *lchild *rchild;

  BinTNode;

  typedef BinTNode *BinTree;

  int count;

  void CreateBinTree(BinTree *T);

  void PreorderN(BinTree T);

  #define StackSize /*假定预分配的栈空间最多为 */

  typedef BinTree SDataType; /*栈的元素类型设为整型*/

  #define Error printf

  typedef struct

  SDataType data[StackSize];

  int top;

  SeqStack;

  void InitStack(SeqStack *S) /*初始栈*/

   S >top= ;

  

  int StackEmpty(SeqStack *S) /*判栈空*/

  return S >top== ;

  

  int StackFull(SeqStack *S) /*判栈满*/

  return S >top==StackSize ;

  

  void Push(SeqStack *S SDataType x) /*进栈*/

  if(StackFull(S))

  Error( 栈已满\\n ); /*上溢退出*/

  else S >data[++S >top]=x; /*栈顶指针加 后将x进栈*/

  

  SDataType Pop(SeqStack *S) /*出栈*/

  if (StackEmpty(S))

  Error( Stack underflow ); /*下溢退出*/

  else return S >data[S >top ]; /*栈顶指针返回后将栈顶指针减 */

  

  SDataType StackTop(SeqStack *S) /*取栈顶元素*/

  if (StackEmpty(S))

  Error( 栈已空\\n );

  return S >data[S >top];

  

  main()

  BinTree T;

  char ch ch ;

  printf( \\n欢迎进入二叉树操作测试程序 请选择 \\n );

  ch = y ;

  while(ch == y || ch == Y )

  printf( \\nA 二叉树建立 );

  printf( \\nB 先序遍历(非递归) );

  printf( \\nC 退出\\n );

  scanf( \\n%c &ch );

  switch(ch )

  case A :

  case a :printf( 按二叉树带空指针的先序次序输入结点:\\n );

  CreateBinTree(&T);

  printf( 二叉树建立成功\\n );break;

  case B :

  case b :printf( 遍历的结果为:\\n );

  PreorderN(T);break;

  case C :

  case c :ch = n ;break;

  default:ch = n ;

  

  

  

  void CreateBinTree(BinTree *T)

  char ch;

  scanf( \\n%c &ch);

  if (ch== ) *T=NULL;

  else *T=(BinTNode*)malloc(sizeof(BinTNode));

  (*T) >data=ch;

  CreateBinTree(&(*T) >lchild);

  CreateBinTree(&(*T) >rchild);

  

  

  void PreorderN(BinTree T)

  /*先序遍历二叉树T的非递归算法*/

  SeqStack *S;

  BinTree p;

  InitStack(S);Push(S T); /*根指针进栈*/

  while(!StackEmpty(S))

  while(p=StackTop(S))

   printf( % c p >data); /*访问入栈结点的数据域*/

  Push(S p >lchild); /*向左走到尽头*/

  

  p=Pop(S); /*空指针退栈*/

  if (!StackEmpty(S)) /*输出结点 向右一步*/

  p=Pop(S);

  /* printf( % c p >data); */

  Push(S p >rchild);

  

  

cha138/Article/program/sjjg/201311/23547

相关参考

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (五)[7]

  .利用栈的基本操作写出先序遍历二叉树的非递归算法要求进栈的元素最少并指出下列(最右图)二叉树中需进栈的元素【山东科技大学四(分)】  .设一棵完全二叉树使用顺序存储在数组bt[n]中请写出进行非递

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (三)[16]

  .下列是先序遍历二叉树的非递归子程序请阅读子程序(C语言与PASCAL语言过程功能完全相同任选其一)填充空格使其成为完整的算法【同济大学年三(分)】 cha138/Articl

知识大全 数据结构考研分类复习真题 第六章 答案 (五)[15]

  [题目分析]先序遍历二叉树的非递归算法要求进栈元素少意味着空指针不进栈  voidPreOrder(Bitree bt)//对二叉数bt进行非递归遍历  inttop=;Bitrees[

知识大全 c#二叉树遍历vs2008实现

  下面简单介绍一下几种算法和思路  先序遍历  访问根结点  按先序遍历左子树;  按先序遍历右子树;  例如遍历已知二叉树结果为A>B>D>G>H>C>E>

知识大全 数据结构 6.2.1 先序遍历二叉树

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  先序遍历二叉树  若二叉树为空则空操作否则  ()访问根结点  ()先序遍历

知识大全 树 - 二叉树的遍历 (二)

  遍历序列  遍历二叉树的执行踪迹  三种递归遍历算法的搜索路线相同(如下图虚线所示)  具体线路为  从根结点出发逆时针沿着二叉树外缘移动对每个结点均途径三次最后回到根结点  >  遍历序列  (

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (三)[19]

  .n个结点的完全二叉树存储在数组a中下面为非递归的先序遍历算法  PROCpreorder(a);  BEGINtop:=;t:=;  WHILE (t<=n)OR()______

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (四)[19]

  .在二叉树的前序遍历和中序遍历的递归算法中最后一个递归调用语句在调用时所保留的参数有什么作用?如何清除最后这个递归语句?【北京邮电大学三(分)】  .在二叉树的LlinkRlink存储表示中引入线

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (三)[18]

  .以下程序是二叉链表树中序遍历的非递归算法请填空使之完善二叉树链表的结点类型的定义如下  typedefstructnode  /*C语言/  chardata;struct&

知识大全 二叉树遍历算法C#实现

二叉树遍历算法C#实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用C#实现了二叉树的定义怎