树的三种遍历方式

      今天学到了树的三种遍历方式:前序遍历,中序遍历,后序遍历,层序遍历;这里的 前中后 指的是头节点在遍历中的访问次序。层序遍历 就是一层一层的打印 即 由上到下 由左到右 打印。

来看一看这四种遍历方式的代码:

      前序遍历:

void PreorderTraversal( BinTree T ){
	if (T==NULL)//当遍历到的节点为空时终止遍历
	return ;
	printf("%d ",T->Data);//首先打印头节点
	PreorderTraversal(T->Left);
	PreorderTraversal(T->Right);
}

      中序遍历:

void InorderTraversal( BinTree T ){
	if (T==NULL)//同理
	return ;
	InorderTraversal(T->Left);
	printf("%d ",T->Data);//打印中间节点
	InorderTraversal(T->Right);
}

      后序遍历:

void PostorderTraversal( BinTree T ){
	if (T==NULL)
	return ;
	PostorderTraversal( T->Left );
	PostorderTraversal( T->Right);
	printf("%d ",T->Data);//最后打印中间节点
}

      层序遍历  :层序遍历不能用递归来打印数据,而是用 队列 来依次储存节点 然后依次打印。代码如下:

void LevelorderTraversal( BinTree T ){
	BinTree queue[100];
	int head = 0,tail = 0;
	queue[tail++] = T;
	while (head != tail){ //当head == tail 时即说明 队列中已经没有节点了
		printf("%d ",queue[head]->Data);
		if (queue[head]->Left != NULL) queue[tail++] = queue[head]->Left;
		if (queue[head]->Right != NULL) queue[tail++] = queue[head]->Right;
		head ++;
	}
}

 

你可能感兴趣的:(算法,数据结构,树)