打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(浙大-19-夏-数据结构学习笔记)二叉树的遍历(递归 非递归)

递归遍历

  1. 先序遍历
    遍历过程为:
    ① 访问根结点;
    ② 先序遍历其左子树;
    ③ 先序遍历其右子树。
void PreOrderTraversal(BinTree BT)//先序遍历 {	 if(BT)	 {		  printf("]",BT->Data);		  PreOrderTraversal(BT->Left);		  PreOrderTraversal(BT->Right);	 }} 


2. 中序遍历
遍历过程为:
① 中序遍历其左子树;
② 访问根结点;
③ 中序遍历其右子树

void PreOrderTraversal(BinTree BT)//中序遍历 {	 if(BT)	 {		  PreOrderTraversal(BT->Left);		  printf("]",BT->Data);		  PreOrderTraversal(BT->Right);	 }}
  1. 后序遍历
    遍历过程为:
    ① 后序遍历其左子树; ② 后序遍历其右子树; ③ 访问根结点。
void PostOrderTraversal( BinTree BT ){    if( BT ) {         PostOrderTraversal( BT->Left );         PostOrderTraversal( BT->Right);         printf(“%d”, BT->Data);    }}

非递归遍历

  1. 先序遍历
void InOrderTraversal( BinTree BT ) {      BinTree T = BT;    Stack S = CreatStack( MaxSize ); //创建并初始化堆栈S    while( T || !IsEmpty(S) )    {       while(T) //一直向左并将沿途结点压入堆栈       {             printf(“]”, T->Data); //(访问)打印结点           Push(S,T);           T = T->Left;       }       if(!IsEmpty(S))       {           T = Pop(S); /*结点弹出堆栈*/               T = T->Right; /*转向右子树*/       }    }}
  1. 中序遍历
void PreOrderTraversal(BinTree BT)//中序遍历 ,非递归{    BinTree T = BT;    Stack S = CreatStack(Maxsize);    while( T || !IsEmpty(S) )    {   	 while( T )   	  {   		   Push(S,T);   		   T = T->Left;   	  }   	  if(!IsEmpty(S) )   	  {   		   T = Pop( S );   		   printf("]",T->Data);   		   T = T->Right;   	   }    } } 
  1. 后序遍历
void PostorderTraversal(BinTree BT)//序遍历 ,非递归{   BinTree T = BT;   Stack S = CreateStack(MaxSize);   while(T || !isEmpty(S))//只要没有完全输出,包括在堆栈中的和二叉树中的元素,一直进行循环   {       while(T)       {           Push(S, T);           T = T->left;       }       T = Pop(S);  //没有左子节点时,先拿出此节点       if(!isEmpty(S))       {           if(T->right)  //判断是否有右子节点,如有,再压入栈,进入下一层;如没有则访问           {               Push(S, T);               T = T->right;           }           else           {               printf("]", T->Data);               T = NULL;  //将当前已访问节点置为NULL,防止回到上一层时重复遍历           }       }   }}
来源:https://www.icode9.com/content-4-352101.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
二叉树的遍历:先序中序后序遍历的递归与非递归实现及层序遍历
二叉排序树的三种遍历方式和实现源代码
数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
【经典面试题二】二叉树的递归与非递归遍历(前序、中序、后序)
数据结构学习笔记:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算
数据结构_二叉树的遍历_课程设计
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服