codevs 3143 二叉树的序遍历

传送门

Description

求一棵二叉树的前序遍历,中序遍历和后序遍历

Input

第一行一个整数n,表示这棵树的节点个数。

接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。

Output

输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。

Sample Input

5

2 3

4 5

0 0

0 0

0 0

Sample Output

1 2 4 5 3

4 2 5 1 3

4 5 2 3 1

思路

 
#include<bits/stdc++.h>
using namespace std;
const int maxn = 20;
int lson[maxn] = {0},rson[maxn] = {0};

void preorder(int x)
{
	if (x != 1)	printf(" ");
	printf("%d",x);
	if (lson[x])	preorder(lson[x]);
	if (rson[x])	preorder(rson[x]);
}

void inorder(int x)
{
	if (x)
	{
		inorder(lson[x]);
		printf("%d ",x);
		inorder(rson[x]);
	}
}

void postorder(int x)
{
	if (lson[x])	postorder(lson[x]);
	if (rson[x])	postorder(rson[x]);
	printf("%d ",x);
}

int main()
{
	int N;
	scanf("%d",&N);
	for (int i = 1;i <= N;i++)	scanf("%d%d",&lson[i],&rson[i]);
	preorder(1);printf("\n");
	inorder(1);printf("\n");
	postorder(1);printf("\n");
	return 0;
}

  

上一篇:Docker学习(13) Docker容器的网络连接


下一篇:Docker基本命令与使用 —— Docker容器(一)