博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前序遍历
阅读量:6823 次
发布时间:2019-06-26

本文共 1630 字,大约阅读时间需要 5 分钟。

知识点总结报告

知识点:

前序遍历

(原理)前序遍历二叉树过程

(1)访问根结点

(2)先序遍历左子树

(3)先序遍历右子树

  中序遍历递归算法

void PreOrder(BTNode *b)        //先序遍历的递归算法

{   if (b!=NULL)

   {  printf("%c ",b->data);  //访问根节点

      PreOrder(b->lchild);    //递归访问左子树

      PreOrder(b->rchild);    //递归访问右子树
   }
}

  前序遍历非递归算法

采用顺序栈存储结构,类型声明如下

typedef struct                //存放栈中数据元素

{  BTNode * data[MaxSize];         //存放栈顶指针

  int top;                  //顺序栈存储类型

}SqStack;

非递归算法1

void PreOrder1(BTNode *b)            //先序非递归遍历算法1

{  BTNode *p;                 

  SqSack  *st;                //定义栈指针st

  InitStack(st);                //初始化栈st

  if(b!=NULL)

  {  Push(st,b);              //根结点进栈

    while(!=StackEmpty(st))        //栈不为空时循环

    {  Pop(st,p);            //退栈结点p并访问它

      printf("%c",p->data);

      if(p->rchild!=NULL)        //有右孩子时将其进栈

        Push(st,p->rchild);    

      if(p->lchild!=NULL)         //有左孩子时将其进栈

        Push(st,p->lchild);

    }

    printf("\n");

  }

  DestroyStack(st);              //销毁栈

}

二叉链表中前序遍历非递归算法

void PreOrder2(BTNode *b)              //先序遍历非递归算法2

{  BTNode *p;

  SqStack *st;                   //定义一个顺序栈指针st

  InitStack(st);                   //初始化栈st

  p=b;

  while(!StackEmpty(st)||p!=NULL)

  {  while(p!=NULL)               //访问结点p及其所有左下结点并进栈

     {  printf("%c",p->data);          //访问结点p

       Push(st,p);              //结点p进栈

       p=p->lchild;              //移动到左孩子

     }

     if(!StackEmpty(st))             //若栈不空

     {  Pop(st,p);              //出栈结点p

       p=p->rchild;              //转向处理其右子树

     }

  }

  printf("\n");

  DestroyStack(st);                //销毁栈

}                       

 

 

转载于:https://www.cnblogs.com/li1997/p/8365975.html

你可能感兴趣的文章
为 NokiaQt SDK增加新的Symbian SDK开发平台
查看>>
jquery总结(1)
查看>>
关于Altium Designer 提示发送错误报告解决方法
查看>>
用Recycle()方法对Java对象的重要性
查看>>
统一建模语言(UML) 版本 2.0
查看>>
JSONArray数据转换成java List
查看>>
你不了解PHP的10件事情
查看>>
【SEO】周末了,为了纪念明天上班,我们来一起看看SEO吧
查看>>
centos 6.4 x64安装bugfree
查看>>
sqlplus连接远程数据库
查看>>
专题实验 日期类型
查看>>
[ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel
查看>>
文字有阴影效果
查看>>
弱占优策略--Weakly Dominant Strategy
查看>>
iOS开发基础知识--碎片15
查看>>
Oracle更改字符集
查看>>
Data Guard 主备库角色转换
查看>>
linux系统下MySQL表名区分大小写问题
查看>>
【.Net】net 反射15分钟速成
查看>>
[进程]kill 9和15,以及pkill, killall
查看>>