레이어 순서 가중 순서 회전 전 순서와 후 순서

2478 단어
무릇 나무는 우선 귀속적인 방법으로 할 수 있는지를 고려해야 한다.예:
층차: 1, 2, 3, 4, 5, 6, 7.
중서: 42 5 1 6 3 7
1은 반드시 루트 노드이고 중서에서 위치를 찾습니다. 중서의 1은 중서를 좌우 트리로 나눈다. 우리는 v1로 왼쪽 트리의 노드를 저장하고 층서에서 두 번째 노드부터 층계의 순서에 따라 순서대로 v2, v3에 들어갑니다.v2, v3는 각각 왼쪽 나무와 오른쪽 나무의 층계가 두루 다니기 때문에 자 문제가 된다.
첫 번째 귀속은 이곳 v2는 245이다.v3은 3, 6, 7
그리고 더 이상 말할 필요가 없겠죠. 전차와 후차 조작 사상은 똑같아요. 대부분 코드가 똑같아요. 바로push_백 순서가 달라요.
 
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// , 。。。
using namespace std;
int sum = 0;
vectorpreorder, inorder, postorder, levelorder;
void getpreorder(vectorv,int instart,int inend) {
	if (v.size()==0)
		return;
	int i = 0;
	while (inorder[instart + i] != v[0])
		i++;
	vectorv1, v2,v3;
	for (int j = instart; j <= instart+i-1; j++) {
		v1.push_back(inorder[j]);
	}  
	for (int j = 1; j < v.size(); j++) {
		if (find(v1.begin(), v1.end(), v[j]) != v1.end())
			v2.push_back(v[j]);
		else
			v3.push_back(v[j]);
	}
	preorder.push_back(v[0]);
	getpreorder(v2, instart, instart + i - 1);
	getpreorder(v3, instart + i + 1, inend);
}
void getpostorder(vectorv, int instart, int inend) {
	if (instart > inend)
		return;
	int i = 0;
	while (inorder[instart + i] != v[0])
		i++;
	vectorv1, v2, v3;
	for (int j = instart; j <= instart + i - 1; j++) {
		v1.push_back(inorder[j]);
	}
	for (int j = 1; j < v.size(); j++) {
		if (find(v1.begin(), v1.end(), v[j]) != v1.end())   
			v2.push_back(v[j]);
		else
			v3.push_back(v[j]);		
	}
	getpostorder(v2, instart, instart + i - 1);
	getpostorder(v3, instart + i + 1, inend);
	postorder.push_back(v[0]);
}

int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int tem;
		scanf("%d", &tem);
		levelorder.push_back(tem);
	}
	for (int i = 0; i < n; i++) {
		int tem;
		scanf("%d", &tem);
		inorder.push_back(tem);
	}
	getpreorder(levelorder, 0, n - 1);
	getpostorder(levelorder, 0, n - 1);
	for (int i = 0; i < preorder.size(); i++) {
		printf("%d ", preorder[i]);
	}
	cout << endl;
	for (int i = 0; i < postorder.size(); i++) {
		printf("%d ", postorder[i]);
	}
	system("pause");
	return 0;
}

좋은 웹페이지 즐겨찾기