pat甲級 1102 Invert a Binary Tree (25 分)(二叉樹遍歷)

題目鏈接:傳送門

思路:忘了invert是反轉的意思,然會寫了代碼對不上樣例。。這個題直接用結構體存儲二叉樹,中序直接dfs,層序直接bfs即可。

代碼:

#include <bits/stdc++.h>

using namespace std;

const int maxn = 300;

struct node {
	int data , left , right;
}tree[maxn];

int kase;
int vis[maxn];

void dfs(char u) {
	if(tree[u].left != '-')dfs(tree[u].left);
	if(kase > 0)cout << " ";
	cout << u;
	kase++;
	if(tree[u].right != '-')dfs(tree[u].right);
}


void bfs(char u) {
	queue <char> q;
	q.push(u);
	while(!q.empty()) {
		char v = q.front(); q.pop();
		if(kase > 0)cout << " ";
		cout << v;
		kase++;
		if(tree[v].left != '-')q.push(tree[v].left);
		if(tree[v].right != '-')q.push(tree[v].right);
	}
}


int main() {
	int n;
	ios::sync_with_stdio(0);
	cin >> n;
	char root;
	for(int i = 0 ; i < n ; i++) {
		char b , c;
		cin >> b >> c;
		vis[b] = vis[c] = 1;
		tree[i + '0'].right = b;
		tree[i + '0'].left = c;
	}
	for(int i = 0 ; i < n ; i++) if(!vis[i + '0'])root = i + '0';
	bfs(root);
	cout << "\n";
	kase = 0;
	dfs(root);
	cout << "\n";
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章