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

一、引言
二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了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 CHAR
	printf( "%5c", data );
#else
	printf( "%5d", data );
#endif
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值