二叉树树的三种遍历

二叉树树的三种遍历

  其实这三种遍历都是根据递归的性质来的,区别在于输出在调用左边之前,在右边之前,以及在右边之后。

前序遍历

介绍

  前序遍历,就是一个触手不断的往一个左边伸手,每摸到一个节点就把它显示出来,它一路往左边摸,直到左边没节点了,他就返回上一个节点,看下该节点有没有右边节点,有的话就摸右边节点。emmmm,这是个触手怪,他从根节点开始摸,有个原则。1,优先摸左子节点,如果没有左子节点就返回父节点。再摸其他子节点。原则是根节点->左节点->右节点。。。扩大递归就好了。

图解

前序遍历:【1,2,4,5,3,6,7】

算法实现

void PreOrderTraverse(BiTree T)
{
	if(T == NULL)
		return;
	printf("%c",T->data);//显示节点数据
	PreOrderTraverse(T->lchild);//遍历左子树
	PreOrderTraverse(T->rchild);//遍历右子树
}

中序遍历

  中序遍历是一直往左边走,走不动了。再返回

介绍

  中序遍历原则是左节点->根节点->右节点

图解

中序遍历:[4,2,5,1,3,7,6]

算法实现

void InOrderTraverse(BiTree T)
{
	if(T == NULL)
		return;
	InOrderTraverse(T->lchild);//遍历左子树
	printf("%c",T->data);//显示节点数据
	InOrderTraverse(T->rchild);//遍历右子树
}

后序遍历

介绍

  后序遍历原则是左节点->右节点->根节点

图解

后序遍历:[4,5,2,7,6,3,1]

算法实现

void PostOrderTraverse(BiTree T)
{
	if(T == NULL)
		return;
	PostOrderTraverse(T->lchild);//遍历左子树
	PostOrderTraverse(T->rchild);//遍历右子树
	printf("%c",T->data);//显示节点数据
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章