一、引言
二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了C语言版本的先序遍历二叉树的非递归算法和递归算法。
先序遍历的原理很简单,访问结点的次序是:“根—>左—>右”,也就是首先访问树根,之后访问左子树,最后访问右子树。对于左、右子树而言,其访问的次序依然是“根—>左—>右”。也就是说,对于每一棵子树,首先访问树根,再言其它。
从上面描述可以看出遍历过程其实是递归的过程,因此可以使用递归算法来实现,但是同样也可以使用非递归的方法来实现。
二、二叉树的先序遍历详细演示过程
1、假设二叉树(左右子树全)如下图所示:

2、假设二叉树(没有右子树)如下图所示:

3、假设二叉树(没有左子树)如下图所示:

4、对于稍微复杂一点的二叉树,如下图所示:


其先序遍历过程演示如下(“根—>左—>右”)







三、先序遍历二叉树的代码:
1、递归算法

void  PreorderSearch_Recu( BiTree *T )
{    if( T != NULL ) {  VisitNode( T->data ); //访问根结点 PreorderSearch_Recu( T->Lchild ) ; //访问左子树 PreorderSearch_Recu( T->Rchild ) ; //访问右子树   }
}

2、非递归算法

void PreorderSearch( BiTree *T )
{BiTree  *Stack[MAX_NODE] , *p,  *q;int top=0 ;p = T;if( T==NULL ){printf( "Binary Tree is Empty!\n");return;}while( p != NULL )  {VisitNode( p->data );q = p->Rchild; if( NULL != q )  Stack[++top] = q;p = p->Lchild; if( p == NULL && top > 0 ) p = Stack[top--];  }
}

3、VisitNode函数如下:

void VisitNode( datatype data )
{#ifdef CHARprintf( "%5c", data );
#elseprintf( "%5d", data );
#endif
}

补充:结合前面文章中的创建二叉树的算法,就可以完整的二叉树创建与遍历工作了。此处不再赘叙创建的算法。

二叉树遍历之先序遍历算法(非递归、递归)入门详解相关推荐

  1. 二叉树遍历之中序遍历算法(非递归、递归)入门详解

    一.引言 二叉树的遍历常见的方法有先序遍历.中序遍历.后序遍历和层次遍历等,本文给出了C语言版本的中序遍历二叉树的非递归算法和递归算法. 中序遍历的原理很简单,也就是把树根的访问放在中间.访问结点的次 ...

  2. 二叉树遍历之后序遍历(非递归、递归)入门详解

    一.引言 二叉树的遍历常见的方法有先序遍历.中序遍历.后序遍历和层次遍历等,本文给出了C语言版本的后序遍历二叉树的非递归算法和递归算法. 后序遍历不如先序遍历简单,是相对最复杂的一种遍历方法.访问结点 ...

  3. 计算二叉树深度算法(递归、非递归)入门详解

    一.引言 二叉树在应用时,经常需要知道二叉树的深度.二叉树的深度就是二叉树的层数,即从树根算起,到最底下一层的层数是多少,即二叉树中结点的最大层次值. 本文给出了计算二叉树深度的算法,包括递归算法和非 ...

  4. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  5. 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历

    数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...

  6. [算法] 二叉树的 先序遍历、中序遍历、后序遍历

    本文根据清华大学邓俊辉老师课程<数据结构>总结,课程地址 . 遍历介绍 按照事先约定的某种规则或次序,对节点各访问一次而且仅一次.与向量和列表等线性结构一样,二叉树的这类访问也统称为遍历( ...

  7. 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法

    二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...

  8. pat根据中序遍历和先序遍历_算法题399:从前序与中序遍历序列构造二叉树

    (给算法爱好者加星标,修炼编程内功) 来源: 数据结构和算法-山大王wld 问题描述 今天我们就不做关于双指针的了,我们爬到树上玩会儿,做一道关于二叉树的题.今天的题就一句话,根据一棵树的前序遍历与中 ...

  9. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  10. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

    二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...

最新文章

  1. [Object-C语言随笔之二] 《NSLog》常用的打印调试语句与自动排版
  2. 操作系统c语言两个进程制约且互斥,电大计算机本科《操作系统》作业2及答案...
  3. xpath获取标签的属性值_论xpath与css定位方式
  4. javaWeb回忆思维导图
  5. 暑期训练日志----2018.8.11
  6. Go Web开发之Revel - 返回值
  7. opencv 读取视频、打开摄像头、写入视频文件
  8. 深入理解JVM虚拟机读书笔记【第七章】虚拟机类加载机制
  9. py-faster-rcnn标注FDDB人脸便于其在FDDB上进行测试
  10. 魔方:公式记忆(三字诀)
  11. Java Logging之JUL系列——Logger Hierarchy
  12. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计:公告板(Billboard)技术
  13. 消除设计教室中的白人至上主义我与设计大师cheryl d miller的对话
  14. 359860-27-8,Biotin-PEG3-Amine增加了与生物素化合物共轭的分子的水溶性
  15. [计组笔记]存储器的扩展
  16. Android音频通信--简单演示程序
  17. 不要小看了get 与set
  18. 研发思维08----嵌入式智能产品数据服务后端分析
  19. [ABC283D] 题解
  20. mvc php 代码审计,代码审计从入门到放弃系列篇一之代码审计学习思路

热门文章

  1. 立创开源 | 基于lm393的模数温度传感器
  2. WPF UI 框架 收集
  3. java 远程视频监控系统_基于JAVA的远程屏幕监控系统
  4. Win10 安装 IE11 教程
  5. 众多优质资源限时看,24小时删!
  6. html拷贝图片不显示,【原创软件小知识】——拷贝cad文件中光栅图片不显示的问题...
  7. Windows XP Embedded下载
  8. 海康DS-2DY5223IW-DM
  9. 2018年下半年计算机软件,2018年下半年程序员真题+答案解析(全国计算机软考)上午选择+下午案例完整版.pdf...
  10. 设计一个序列信号发生器, 产生序列信号1011101. 用74LS161和4选1数据选择器74153及必要的门电路实现