二叉树的遍历(前序 中序 后序)

一、前序遍历

        顺序为: 根-->左子树---->右子树 

        先访问根节点,再递归进入根节点的左子树(通过递归不断往下遍历),直到访问的节点没有左子树,此时递归进入其右子树(通过递归进行相同操作),直至所有的节点都被访问过,访问的顺序即为前序遍历。

        前序遍历的代码: (可以根据前序遍历的代码推出前序遍历的过程)

typedef struct BiTNode{
	int data;
	struct BiTNode* lchild, * rchild;
}BiTNode,*BiTree;

void PreOrder(BiTree T) // 前序遍历
{
	if (T!=NULL)
	{
		visit(T);                访问根结点
		PreOrder(T->lchild);     //递归遍历左子树
		PreOrder(T->rchild);     //递归遍历右子树
	}
}

        前序遍历的过程(图示)

        以如下二叉树为例:进行先访问根,再左子树,右子树的顺序遍历(递归)

 前序遍历的访问顺序:

前序遍历的顺序为: ABDECF  

       二、中序遍历

        顺序为: 左子树----> 根 ------> 右子树

        先递归进入根结点的左子树结点,再访问根结点,最后递归进入根结点的右子树结点;如果其左子树或右子树为分支结点,则需要对分支结点再进行一遍中序遍历。

        中序遍历代码:

void InOrder(BiTree T) // 中序遍历
{
	if (T!=NULL)
	{
		InOrder(T->lchild);		//递归遍历左子树
		visit(T);				//访问根结点
		InOrder(T->rchild);		//递归遍历右子树
	}
}

同样以上述二叉树为例进行图示:

        可以发现:中序遍历的顺序即为二叉树中节点并排时的从左到右

         

三、后序遍历

        过程:左子树---->右子树----->根

        先递归进入根结点的左子树结点,再递归进入根结点的右子树结点,最后访问根结点;如果其左子树或右子树为分支结点,则需要对分支结点再进行一遍后序遍历。 

        代码:

void PostOrder(BiTree T) // 后续遍历
{
	if (T!=NULL)
	{
		PostOrder(T->lchild);	//递归遍历左子树
		PostOrder(T->rchild);	//递归遍历右子树
		visit(T);				//访问根结点
	}
}

        图示过程:

        后序遍历不能直接通过二叉树写出,需要根据代码的思路过程拓展。 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值