ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-24 21:01:44  阅读:322  来源: 互联网

标签:遍历 递归 19 Data BT PreOrderTraversal 二叉树 printf BinTree


递归遍历

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

在这里插入图片描述
2. 中序遍历
遍历过程为:
① 中序遍历其左子树;
② 访问根结点;
③ 中序遍历其右子树
在这里插入图片描述

void PreOrderTraversal(BinTree BT)//中序遍历 
{
	 if(BT)
	 {
		  PreOrderTraversal(BT->Left);
		  printf("%5d",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(“%5d”, 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("%5d",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("%5d", T->Data);
               T = NULL;  //将当前已访问节点置为NULL,防止回到上一层时重复遍历
           }
       }
   }
}

标签:遍历,递归,19,Data,BT,PreOrderTraversal,二叉树,printf,BinTree
来源: https://blog.csdn.net/qq_44116998/article/details/97141664

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有